如果现在在我的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 小时。