我在Chrome JS控制台中尝试了这个,我的区域设置时区设置为PST:
(new Date("07-15-2005"))
=> 2005年7月15日星期五00:00:00 GMT-0700(PDT)
(new Date("07-15-2005")).getTime();
=> 1121410800000
但....
(new Date("2005-07-15"))
=> 2005年7月14日星期四17:00:00 GMT-0700(PDT)
(new Date("2005-07-15")).getTime();
=> 1121385600000
我期待在两者中都发生字符串解析 . 但我无法弄清楚为什么当使用格式YYYY-MM-DD时,它会假定时区偏移 . 就像我在我当地的TZ中表达“2005-07-15”,但“07-15-2005”以UTC表示 .
是正确的解释吗?
3 回答
实现似乎是供应商特定的,但是查看日期parse的文档,我们看到从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
函数,它可能会回退到特定于实现的启发式或特定于实现的日期格式 .