2016-02-26 59 views
0

当我建立一个日期形式是ISO字符串“2016-02-01T16:00:00Z”我星期一2016年2月1日17:00:00 GMT + 0100javascript日期时区奇怪的行为

它的接缝的js由于某些原因增加了一小时。

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

只是做

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

+0

下面的答案有帮助吗? – jszobody

回答

2

根据规范,将ISO日期字符串解析为UTC + 0000,这在末尾用Z char表示。

Z是对于零UTC的区标志偏移

在您指明为Date()构造函数的日期时间字符串,它解析为UTC。
方法Date.prototype.toString()根据您的时区格式化日期,该日期可能与UTC不同。因为你得到这个抵消。

这可能表明在ISO字符串的结尾自定义时区与±hh:mm

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来看出,但是,使用Date构造函数解析字符串是不可靠的并且不推荐,这比手动解析字符串更好(一个库可以帮助但不是在大多数情况下是必要的) – RobG

1

的Javascript需要你的时间字符串,解析它表明(UTC)的时区,但随后显示它在当前的时区。

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

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

+0

这是正确的,它以不同的方式印刷。这可以通过打印date.toString()和date.toUTCString() – Sandman

0

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