为何会有GMT+0805 (中国标准时间)?

1.问题:
谷歌浏览器
console输入:new Date(1899, 11, 31, 0, 0, 0)
打印:Sun Dec 31 1899 00:00:00 GMT+0805 (中国标准时间)

图片描述

2.疑问:为何会出现+0805,如何避免或替代方案?

PS:后续会用到getTime(),getTimezoneOffset()

感谢。

阅读 10.1k
2 个回答

因为1901年之前,上海时间是+8:05:43的,直到1901年之后,切换为真正的东八区,即+8:00:00,chrome做的太细致了,参考下面这个网站,可以看到历年时间迁移

https://www.timeanddate.com/t...

不过在我的chrome版本上,却直接返回 Sun Dec 31 1899 00:00:00 GMT+0800,估计和chrome版本有关。

感谢@i38me 的科普。
刚刚自己试了moment.js来替代,暂时可行。新版谷歌浏览器如果遇到同样问题的童鞋可以参考下:

思路:
1.获取1899年当时的时区(例:地点中国上海):
moment([1899,11,31,0,0,0]).utcOffset() 代替getTimezoneOffset() PS:zone已弃用,有个正负值得问题未研究,注意下
==>480
即为东八区
2.转化下480==> +0800(自己写下通用函数)
3.moment("1899-12-31 0:0:0 +0800" , "YYYY-MM-DD HH:mm Z").valueOf() 可代替getTime()

暂时解决方案

2018-12-29增加:
替代方法

 function getTimeFunc(time){
    var dateOffset = -moment(moment(time).toArray()).utcOffset();
    var timeZ = dateOffset/60 < 0 ? "+" + -dateOffset/60 : dateOffset/60;

    return moment(moment(time).format("YYYY-MM-DD HH:mm:ss ") + timeZ, "YYYY-MM-DD HH:mm Z").valueOf();
}

function getTimezoneOffsetFunc(time){
    return -moment(moment(time).toArray()).utcOffset();
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏