首页 文章

Javascript new Date(str) - 不同的解析规则

提问于
浏览
2

我在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 回答

  • 0

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

    根据Date.UTC文档,如果没有另外指定,ISO 8601日期假定为UTC时间,因此自动添加时区差异 .

    RFC2822日期似乎被假定为本地时间,因此不会被修改 .

  • 1

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

    见:http://jsfiddle.net/f7DMV/

    在Firefox和Opera中,我只能正确解析中间行,其他的是无效日期 .

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

  • 0

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

相关问题