javascript时间戳的坑
2016-03-26 16:28
316 查看
最近在使用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就是正确的时间戳咯~
因为得到的是一个时间字符串,因此惯常的做法是将这个时间字符串直接用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就是正确的时间戳咯~
相关文章推荐
- 重拾JavaScript-day1
- js实现九九乘法表
- 深入理解JavaScript系列(32):设计模式之观察者模式
- javascript的错误处理
- 换行符在ajax中返回json,eval时发生的 Unexpected token ILLEGAL
- javascript实现方法调用与方法触发小结
- js函数节流
- js-全局变量与局部变量
- JS实现滚动监听以及滑动到顶部
- podspec转podspec.json
- 小议json与数组的区别
- 笔记-JS中常见的数据运算
- JS魔法堂:从void 0 === undefined说起
- js闭包
- JavaScript arguments对象
- jsp中java代码、jsp代码、js代码执行的顺序
- JSP
- js中设置显示和隐藏
- js中this指向总结
- js删除数组里的某个元素