Javascript new Date(str)

我在Chrome的JS控制台中尝试了这一点,我的语言环境时区设置为PST:

(new Date("07-15-2005"))

=> Fri Jul 15 2005 00:00:00 GMT-0700(PDT)

(new Date("07-15-2005")).getTime();

=> 1121410800000

但....

(new Date("2005-07-15"))

=> Thu Jul 14 2005 17:00:00 GMT-0700(PDT)

(new Date("2005-07-15")).getTime();

=> 1121385600000

我期待字符串解析发生在两个。 但是我不明白为什么使用YYYY-MM-DD格式时,它假设时区偏移。 就好像我在本地TZ表达“2005-07-15”,但“07-15-2005”以UTC表示。

是正确的解释吗?


实现似乎是供应商特定的,但是看看日期解析的文档,我们看到从1.8.5开始,javascript支持RFC2822日期和ISO 8601日期。

根据Date.UTC文档,如果未另行指定,则ISO 8601日期被假定为UTC时间,因此时区差异会自动添加。

RFC2822日期似乎被认为是当地时间,因此不会被修改。


我似乎无法复制您的结果,但结果似乎因浏览器而异。

请参阅:http://jsfiddle.net/f7DMV/

在Firefox和Opera中,我只得到正确的中间行解析,其他则是无效日期。

在Chrome中,第一行和第二行都正确解析(并且没有不同),但最后一行仍然无效。


它会因浏览器而异。 ECMA262规范说明了任何不是YYYY-MM-DD格式并传递给Date函数的字符串,它可能会回退到实现特定的启发式或实现特定的日期格式。

链接地址: http://www.djcxy.com/p/3071.html

上一篇: Javascript new Date(str)

下一篇: Get correct long value from parsed Date (Timezone issue)