当我建立这个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);
答案 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