1.问题:
谷歌浏览器
console输入:new Date(1899, 11, 31, 0, 0, 0)
打印:Sun Dec 31 1899 00:00:00 GMT+0805 (中国标准时间)
2.疑问:为何会出现+0805,如何避免或替代方案?
PS:后续会用到getTime(),getTimezoneOffset()
感谢。
1.问题:
谷歌浏览器
console输入:new Date(1899, 11, 31, 0, 0, 0)
打印:Sun Dec 31 1899 00:00:00 GMT+0805 (中国标准时间)
2.疑问:为何会出现+0805,如何避免或替代方案?
PS:后续会用到getTime(),getTimezoneOffset()
感谢。
感谢@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();
}
因为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版本有关。