Javascript Date构造函数使用任意时间

时间:2013-07-26 03:24:07

标签: javascript

当我从字符串构造日期对象时,我的结果令人困惑。如果我没有指定时间,似乎时间是任意选择(但可重复)。

var d1=new Date("2013-10-9"), d2=new Date("2013-10-10");
output  = d1+' '+d1.toUTCString()+'<br>\n';
output += d2+' '+d2.toUTCString()+'<br>\n';

Chromium 20.0 ......

Wed Oct 09 2013 00:00:00 GMT-0600 (MDT) Wed, 09 Oct 2013 06:00:00 GMT
Wed Oct 09 2013 18:00:00 GMT-0600 (MDT) Thu, 10 Oct 2013 00:00:00 GMT

为什么Chromium会在10月10日选择不同的时间?

顺便说一下,解决方法就在这里:https://stackoverflow.com/a/744134/86967

1 个答案:

答案 0 :(得分:2)

它与您正在使用的日期字符串的格式有关。如果您指定2013-10-09(注意当天的额外0),那么它会按预期工作。如果日期和月份使用2位数字,则表示您遵循ECMA规范。

var d1=new Date("2013-10-09"), d2=new Date("2013-10-10");
console.log(d1+' '+d1.toUTCString());
console.log(d2+' '+d2.toUTCString());

收率:

Tue Oct 08 2013 20:00:00 GMT-0400 (Eastern Daylight Time) Wed, 09 Oct 2013 00:00:00 GMT 
Wed Oct 09 2013 20:00:00 GMT-0400 (Eastern Daylight Time) Thu, 10 Oct 2013 00:00:00 GMT

我相信他们使用的代码可以在这里找到:

https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/DateMath.cpp

当您提供ECMA日期时,它将使用parseES5DateFromNullTerminatedCharacters方法来解析日期,但是当您使用非标准日期格式时,它将使用parseDateFromNullTerminatedCharacters方法。我不熟悉webkit代码,所以我可能错了,但这是基于我对解析逻辑的阅读。

标准日期格式可在15.9.1.15 of the ECMA Spec.

部分找到