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
函数的字符串,它可能会回退到实现特定的启发式或实现特定的日期格式。
下一篇: Get correct long value from parsed Date (Timezone issue)