javascript时间戳的坑

最近在使用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就是正确的时间戳咯~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值