我对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)
我没有传递时区信息,只是上面显示的字符串。当我在控制台中输入相同的代码时,我会得到相同的行为。
这是另一个传递时区信息的例子。
这是Chrome版本55.0.2883.75(64位)。
我在Firefox 50.0.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点开始!