关于Javascript new Date(字符串):Javascript new Date(str) – 不同的解析规则

Javascript new Date(str) - different parsing rules

我在ChromeJS控制台中尝试了这个方法,我的本地时区设置为pst:

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

=>2005年7月15日星期五00:00:00 GMT-0700(PDT)

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

=>1121410800000

但是……

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

=>2005年7月14日星期四17:00:00 GMT-0700(PDT)

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

=>1121385600000

我希望在这两种情况下都进行字符串分析。但我不明白为什么使用格式YYYY-MM-DD时,它假定时区偏移。就好像我在本地的TZ中表达"2005-07-15",但"07-15-2005"是用UTC表示的。

解释正确吗?


该实现似乎是特定于供应商的,但是从日期分析文档中我们可以看到,从1.8.5版开始,javascript既支持RFC282日期,也支持ISO 8601日期。

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

RFC2822日期似乎假定为当地时间,因此不作修改。


它会因浏览器而异。ECMA262规范指出,任何不采用YYYY-MM-DD格式并传递给Date函数的字符串,都可能返回到特定于实现的启发式或特定于实现的日期格式。


我似乎无法复制您的结果,但不同浏览器的结果似乎不同。

参见:http://jsfiddle.net/f7dmv/

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

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