最近在使用javascript进行时间处理。
因为得到的是一个时间字符串,因此惯常的做法是将这个时间字符串直接用new Date(str)的方法转换成时间对象。
但是却发现了问题:传入的时间格式为ISO 8901的时候,javascript将该字符串默认为在GMT(00:00)时区的时间,然后会将该时间转换成当前的时区的时间。
简而言之,就是将你的时间加上了你所在的时区与GMT时区的时差。
--------------------例子----------------------
例如:传入的时间字符串为:'2016-03-08T11:00:02+00:00'(ISO 8901格式)使用new Date('2016-03-08T11:00:02+00:00')转换。
由图可以看到,最终的时间被加了8个小时,这也正是GMT到东八区的时差,8个小时。
同时,我对'2016-03-08T11:00:02+00:00'字符串中'+'号后的时区标识进行了各种尝试,结果都如上面所述,没有任何变化。
经过各种查资料,发现了一个方法:
Date.getTimezoneOffset()。这个方法可以将你的Date对象所在时区与GMT时区的时差以分钟返回给我们。
虽然生成的时间是以GMT0800,也就是东八区(北京所在时区)来呈现的。
通过getTimezoneOffset()方法,我们可得得到他与GMT之间的时差。
然后我们就可以用下面的方法返回我们给定的时间字符串所对应的时间戳数据啦:
PS: 传入时间为:'2016-03-08T11:00:02+00:00'
得到的timeStamp就是正确的时间戳咯~