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

时间:2018-12-29 15:59:57

标签: javascript date datetime timezone

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

new Date('2018-12-29')

它返回:

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

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

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

1 个答案:

答案 0 :(得分:2)

来自JavaScript Date docs

  

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

也来自dateString parameter description in the docs

  

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

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