为什么在同一时区的某些时间戳中,时刻时区显示错误的GMT偏移量?

时间:2016-07-27 04:47:31

标签: timezone momentjs

我在节点6.3.0上使用moment-timezone 0.5.1 我主要处理使用GMT+0800 since 1904的香港时区。
在此之前,它正在使用GMT+0736 since 1885

但由于某种原因,moment-timezone会在纪元附近格式化某些日期以显示GMT+0900,这似乎没有任何历史基础。

我似乎无法找到该模式,也无法在最近的时间戳中重现此问题。

纪元后

moment.tz(123456780, 'Asia/Hong_Kong').toString() // 'Fri Jan 02 1970 18:17:36 GMT+0800'
moment.tz(1234567800, 'Asia/Hong_Kong').toString() // 'Thu Jan 15 1970 14:56:07 GMT+0800'
moment.tz(5999999999, 'Asia/Hong_Kong').toString() // 'Wed Mar 11 1970 18:39:59 GMT+0800'
moment.tz(9000000000, 'Asia/Hong_Kong').toString() // 'Wed Apr 15 1970 12:00:00 GMT+0800'
moment.tz(9300000000, 'Asia/Hong_Kong').toString() // 'Sat Apr 18 1970 23:20:00 GMT+0800'
moment.tz(12345678000, 'Asia/Hong_Kong').toString() // 'Sun May 24 1970 06:21:18 GMT+0900'
moment.tz(9999999999, 'Asia/Hong_Kong').toString() // 'Mon Apr 27 1970 02:46:39 GMT+0900'
moment.tz(9900000000, 'Asia/Hong_Kong').toString() // 'Sat Apr 25 1970 23:00:00 GMT+0900'
moment.tz(9500000000, 'Asia/Hong_Kong').toString() // 'Tue Apr 21 1970 07:53:20 GMT+0900'
moment.tz(9400000000, 'Asia/Hong_Kong').toString() // 'Mon Apr 20 1970 04:06:40 GMT+0900'
moment.tz(9400000000, 'Asia/Hong_Kong').toString() // 'Mon Apr 20 1970 04:06:40 GMT+0900'  

在纪元之前

moment.tz(-9000000000000, 'Asia/Hong_Kong').toString() // 'Thu Oct 19 1684 15:36:42 GMT+0736'
moment.tz(-90000000000000, 'Asia/Hong_Kong').toString() // 'Sun Jan 06 -0882 15:36:42 GMT+0736'
moment.tz(-500000000000, 'Asia/Hong_Kong').toString() // 'Sat Feb 27 1954 07:06:40 GMT+0800'
moment.tz(-100000000000, 'Asia/Hong_Kong').toString() // 'Mon Oct 31 1966 22:13:20 GMT+0800'
moment.tz(-900000000000, 'Asia/Hong_Kong').toString() // 'Wed Jun 25 1941 17:00:00 GMT+0900'
moment.tz(-200000000000, 'Asia/Hong_Kong').toString() // 'Sat Aug 31 1963 13:26:40 GMT+0900'
moment.tz(-800000000000, 'Asia/Hong_Kong').toString() // 'Sat Aug 26 1944 02:46:40 GMT+0900'
moment.tz(-900000000000, 'Asia/Hong_Kong').toString() // 'Wed Jun 25 1941 17:00:00 GMT+0900'

1 个答案:

答案 0 :(得分:2)

基于香港采用夏令时,这似乎也是历史答案:

  

香港在1941年采取了夏令时措施。然而,在二十世纪七十年代,政府认为这些措施是不必要的,因为香港的纬度相对较低。这种做法于1979年被取消。

快速浏览一下1941年到1942年之间的差异,看起来你看到GMT + 8和GMT + 9之间的转换:

moment.tz(new Date('1/1/1941'), 'Asia/Hong_Kong').toString()
// 'Wed Jan 01 1941 16:00:00 GMT+0800'

moment.tz(new Date('1/1/1942'), 'Asia/Hong_Kong').toString()
// 'Thu Jan 01 1942 17:00:00 GMT+0900'