javascript - 为什么 'new Date()' 无法正确解析字符串日期?

标签 javascript date parsing

当我尝试解析三月份的字符串日期时,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 浏览器的屏幕截图:

screenshot from Google Chrome browser

最佳答案

正如其他人指出的那样,这是由于您所在时区的夏令时所致。请注意屏幕截图中的时间:a 的时间为 23b 的时间为午夜 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/

相关文章:

javascript - 三.TransformControls属性和方法

javascript - Jasmine 断言调用顺序

javascript - 需要使用 jQuery、javascript 或任何其他插件修复 SVG DOM

sql - 调整日期以匹配保存的星期几

python - 从字符串中提取日期 ("05/Jan/2014")

python - 逐位解析 argparse 输入

javascript - Jquery 插件对象 #<HTMLDocument> 没有方法 'observe' 问题

java - 在Java中为24小时时间添加冒号?

python - 如何解析pandas中不规则的日期格式?

c++ - 如何在 C++ 中将文本文件解析为结构的不同元素?