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”,但在 UTC 中表示“07-15-2005”。

是正确的解释吗?

4

3 回答 3

1

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

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

RFC2822 日期似乎被假定为当地时间,因此没有被修改。

于 2012-10-03T22:20:59.660 回答
0

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

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

在 Firefox 和 Opera 中,我只正确解析了中间行,其他都是无效日期。

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

于 2012-10-03T22:04:50.713 回答
0

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

于 2012-10-03T22:22:28.617 回答