当我尝试解析三月份的字符串日期时,new Date()
工作不正确。但是当我的字符串日期是四月时,一切都很好。我不明白这一点。为什么会这样?
var a = '2018-03-07T00:00+03:00';
console.log(a);
console.log(new Date(a).toString());
var b = '2018-04-07T00:00+03:00';
console.log(b);
console.log(new Date(b).toString());
这是 Google Chrome 浏览器的屏幕截图:
最佳答案
正如其他人指出的那样,这是由于您所在时区的夏令时所致。请注意屏幕截图中的时间:a
的时间为 23
,b
的时间为午夜 00
,这清楚地表明告诉你发生了什么。
如果您想在没有夏令时的情况下解析值,可以使用 GMT+0 时区,将时区 +3:00
替换为 z
.但是,您需要通过添加/减去时区的小时数(在您的情况下为-3)来手动更正时间。这是一个例子:
var a = '2018-03-07T00:00+03:00';
a.replace('+03:00', 'z');
a = new Date(a);
a.setHours(a.getHours() - 3); //3 is your time-zone
console.log(a.toUTCString());
var b = '2018-04-07T00:00+03:00';
b.replace('+03:00', 'z');
b = new Date(b);
b.setHours(b.getHours() - 3); //3 is your time-zone
console.log(b.toUTCString());
显然,此代码仅适用于一个已知时区。如果您的值可以位于不同的时区,那么您不需要替换,而是需要从字符串中提取时区(此格式的最后 6 个字符,GMT-0 除外,它是 z
),然后用它来纠正 setHours()
行上的时间。
关于javascript - 为什么 'new Date()' 无法正确解析字符串日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781147/