为什么新的日期('2018-12-29')返回12月28日?



如果现在在我的devtools控制台中我键入:

new Date('2018-12-29')

它返回:

Fri Dec 28 2018 16:00:00 GMT-0800 (Pacific Standard Time)

为什么会发生这种情况,解决此问题的正确方法是什么?

这与时区有关吗?如何确保它对所有用户都能正常工作?

来自 JavaScript Date 文档:

如果至少提供了两个参数,则缺少的参数是 设置为 1(如果缺少日期)或 0 表示所有其他日期

同样来自文档中的 dateString 参数说明:

使用 Date 构造函数(和 Date.parse, 它们是等效的)由于浏览器的原因,强烈建议不要这样做 差异和不一致。支持 RFC 2822 格式字符串 仅按惯例。对 ISO 8601 格式的支持不同之处在于 仅日期字符串(例如"1970-01-01")被视为 UTC,而不是本地字符串

由于您正在传递 ISO 8601 格式字符串并且日期字符串中没有时间元素,因此它会用零填充这些参数并在 UTC 中创建日期对象(如 2018-12-29T00:00:00.000Z),然后浏览器将其转换为您的本地时间,在您的情况下,比太平洋时区的前一天晚 8 小时。

最新更新