以下脚本返回 20 而不是 21!
var d = new Date("2010/03/21");
document.write(d.getDate());
我究竟做错了什么?这是一个 JavaScript 错误吗?
以下脚本返回 20 而不是 21!
var d = new Date("2010/03/21");
document.write(d.getDate());
我究竟做错了什么?这是一个 JavaScript 错误吗?
该Date.parse
方法依赖于实现(new Date(string)
等同于Date.parse(string)
)。
虽然这种格式可以在现代浏览器上使用,但您不能 100% 确定浏览器会准确地解释您想要的格式。
我建议您操作您的字符串,并使用带有年、月和日参数的 Date 构造函数:
// parse a date in yyyy-mm-dd format
function parseDate(input) {
var parts = input.match(/(\d+)/g);
// new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
这是夏令时问题,因为Date()使用本地时间。
我住在巴西,2012 年 10 月 21 日是我国大部分地区夏令时的开始,因此巴西不存在 2012 年 10 月 21 日 0:0 到 1:0 之间的本地日期!
有人在这里评论说它有效。发生这种情况是因为正确或错误的小时返回取决于本地用户国家/地区。
见:http ://www.timeanddate.com/news/time/brazil-dst-2012.html
在巴西,2012 年 Java 认为 DST 从 Oct-14 开始(实际上是在 1 周后开始)
var dt = new Date(2012,9,14);
alert(dt.getHours());
产生1和
见:http ://www.timeanddate.com/time/dst/2013.html
解决方案是使用 UTC(协调世界时)时间,因为没有夏令时更改并且您使用一种抽象时间。在大多数实际应用中没有问题。
var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' +
dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' +
dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );
如果有人不使用小时、分钟和秒,那就更容易了,只需放置一个大于或等于 1 的虚拟小时值,如上所示。
是否有可能将字符串参数视为 UTC 并将结果Date
对象视为本地时间,反之亦然?那可以把它扔掉。比较。d.getDate()
_d.getUTCDate()
时区在这里起主要作用。该Date()
功能会将您的时区添加到您作为输入提供的日期。例如:我给了这样的输入:
alert(new Date("2018-09-15"));
对我来说结果是:
2018 年 9 月 15 日星期六 05:30:00 GMT+0530(印度标准时间)
The timezone +05:30
is added to my input's time( you can see in the above result..05:30:00 is being added to the date. Now what I'm telling is if you are in the time zone less than 0 [countries like brazil, mexico,chile,etc... having timezone less than 0] then it will add to your date input (eg: time zone is UTC−05:00. It will subtract -5:00 from the date given.
VahidN, you got the result 20
because you are in the time zone less than 0 (-1è :
00`, etc...)
The solution is reset your time zone to 0. Like this:
Date("2010-03-21T00:00:00").
我也得到了一天的偏差getDate()
,但我注意到它getUTCDate()
返回了预期值。在 FF 3.6.12 中发现了该问题,但在 Chrome 上运行相同的代码很好。
我的调试代码:
var date="2010-11-04";
alert(date);
var d = new Date(date)
alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());
这给出了一个输出(FireFox):
2010 年 11 月 3 日星期三:3 UTC 4
铬很好。所以某处出现了问题 - 可能是一个错误,但更可能是一个时区/UTC参数问题。提醒我,date()
如果那天时区发生变化等,PHP 将在一天内返回 23 小时。不过,如果我知道它是什么,那就麻烦了。
我在浏览器的地址栏中写了以下代码,结果是21
javascript:alert(new Date("2010/03/21").getDate())
没有 Javascript 错误之类的东西,因为有许多 Javascript 实现,所以您需要参考特定的实现。
我测试的实现是 Chrome 4.1.249。你的是啥呢?
我在 Firefox 3.6 和 IE 8 中测试了这段代码:
<script type="text/javascript">
var d = new Date("2010/03/21");
document.write(d.getDate());
</script>
它显示正确的日期:21
有关更多信息,请查看:JavaScript 日期对象
您还可以在 Wikipedia 上阅读JavaScript 兼容性注意事项。
当给 new Date 一个字符串日期时,该字符串需要包含时区,否则它会在不同浏览器之间(由于不同的 javascript 实现)和从机器到其他(由于本地时区的差异)解释不同
new Date('2017-07-31T10:00:00-0500');
代替
new Date('2017-07-31T10:00:00');
http://jsbin.com/aqoki3/edit - 这里有你发布的代码,我得到了21
。所以它不是JS错误。也许它在您的浏览器实现(JS)中存在错误。
因此,要正确初始化您的日期变量使用new Date(year, month, date [, hour, minute, second, millisecond ])
(https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date)。这样你就可以确定那一天是 21,因为你隐式地将它设置为 21。
无论我使用字符串“2010/03/21”还是整数日期参数 (2010,2,21),我在 firfox、safari、chrome、opera 和 IE 中都得到相同的日期 (21)。
我正在使用 Windows 机器和新版本的浏览器-
您可以测试以查看您的客户端是否从字符串解析不同的日期,这是我看到的唯一问题。
if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
}
确保您使用的月份是-1,如果您正在查看六月,则需要在创建时为该月执行 (6-1)
var date_obj = new Date(y,(m-1),d);
您不能通过传递字符串参数显示日期来创建日期对象。
像这样创作。
var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");
date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);
alert(date.toString);
注意date.toString
方法。它返回完整的日期字符串。
date.getDate
只会给你那天的那一天。
有关 Date 对象的更多信息,请参阅 www.w3school.com