为什么我使用javascript日期在浏览器中输入错误的日期?

时间:2016-12-15 20:36:23

标签: javascript google-chrome

我对javascript日期发生的事情感到困惑。这是我的javascript:

toDate(date) {
  return date instanceof Date ? date : new Date(date)
}

当我将字符串"2016-12-01"传递给此函数时,我得到了这个日期

Wed Nov 30 2016 17:00:00 GMT-0700 (MST)

我没有传递时区信息,只是上面显示的字符串。当我在控制台中输入相同的代码时,我会得到相同的行为。

enter image description here

这是另一个传递时区信息的例子。

enter image description here

这是Chrome版本55.0.2883.75(64位)。

我在Firefox 50.0.2中测试过,我没有遇到这个问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

请改为:

new Date("2016-12-01".split("-"))
  

注意:使用Date构造函数解析日期字符串(和   Date.parse,它们是等效的)因为强烈气馁   浏览器差异和不一致。支持RFC 2822格式   字符串仅按惯例。对ISO 8601格式的支持不同   仅限日期的字符串(例如" 1970-01-01")被视为UTC,而不是   本地

来自MDN

答案 1 :(得分:0)

如果您查看Javascript日期的MDN documentation ,您会在将日期字符串传递给Date构造函数的文档下面找到此警告:

  

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

这意味着如果您传递日期字符串“2016-12-01”,则日期构造函数将假定您的意思是2016年12月1日午夜UTC,但会将日期转换为您当地的时区。

你似乎在MST上(和我一样!),这比UTC时间晚了8个小时。因此,将2016年12月1日UTC午夜转换为MST将于2016年11月30日下午5点开始!