Javascript 的"new Date()"返回 '2011-02-1' 和 '2011-02-01' 的不同日期



这是我的实验:

> new Date('2011-02-1')
2011-02-01T08:00:00.000Z
> new Date('2011-02-01')
2011-02-01T00:00:00.000Z

有谁知道为什么两者之间有 8 小时的差异?

谢谢!

这实际上取决于浏览器或 JavaScript 运行时实现来确定会发生什么。Date构造函数符合格式YYYY-MM-DDTHH:mm:ss.sssZ这是 ISO 8601 扩展格式的简化。如果解析失败,则会发生什么特定于实现

从本质上讲,由于您未能为2011-02-1指定DD,因此由浏览器来决定您将获得的内容。例如,在谷歌浏览器中和火狐浏览器中,我得到了2011-02-01T00:00:00.000Z但在Safari中,我只是得到一个错误,Invalid Date.

请参阅 ECMAScript 5 规范:

[...]当给定任何不符合日期时间字符串格式(15.9.1.15)的字符串值并且无法通过toStringtoUTCString方法在该实现中生成时,Date.parse生成的值依赖于实现。

请注意,Date构造函数使用与Date.parse相同的解析算法。这就是为什么强烈建议不要对构造函数使用字符串的原因。使用标准化的多参数版本。参见 MDN。

最新更新