JavaScript日期时区奇怪的行为

时间:2016-02-26 18:36:41

标签: javascript date time timezone difference

当我建立这个ISO字符串的日期表格“2016-02-01T16:00:00Z”我得到了2016年2月1日17:00:00 GMT + 0100

由于某些原因,js增加了一个小时。

我认为这是时区的事情......但我该如何解决这个问题呢?

只是做

var date = new Date('2016-02-01T16:00:00Z');
alert(date);

3 个答案:

答案 0 :(得分:2)

根据规范,ISO日期字符串被解析为UTC + 0000,最后由Z字符表示。

  

Z是零UTC偏移的区域指示符

当您指示Date()构造函数的日期时间字符串时,它将以UTC格式解析 方法Date.prototype.toString()根据您的时区格式化日期,该时区可能与UTC不同。因此你得到了这个偏移量。

可以使用±hh:mm在ISO字符串末尾指示自定义时区:

var d = new Date('2016-02-01T16:00:00+01:00');
d.toString() // will print "Feb 01 2016 16:00:00 GMT+0100", if you're in GMT+01:00

答案 1 :(得分:1)

Javascript采用您的日期时间字符串,在指定的时区(UTC)中解析它,但在您当前的时区显示

当我运行你的代码片段时,我得到GMT-05:00(EST)。

所以它不会增加一个小时。它只是在您当地的时区输出日期。

答案 2 :(得分:0)

您需要考虑TimeZoneOffset Date.getTimezoneOffset()以在不同时区显示相同的日期。例如,将偏移量以分钟为单位转换为小时并将其添加到您的时间,或者编写函数以转换日期与依赖时区偏移量如here