Highcharts 时区问题总结

首先请简单的看一下关于 时区UTC 的定义,我们可以简单的得出以下两个认知:

  1. UTC 是世界标准时间,用于协调各国时间
  2. 中国的时区是 UTC +8,即比标准时区的时间快 8 小时

接着来看问题,很多用户在使用 Highcharts 时,经常会遇到时间显示于预期的不一致,具体表现是:

new Date('2017/01/01').getTime() 获取的时间最终在 Highcharts 中显示的却是 2016-12-31 16:00,也就是时间相差 8 小时。经过上面的科普,你应该很快就知道问题所在,也就是时区惹的祸。

解决办法

1、设置时区偏移

Highcharts.setOptions({
    global: {
        timezoneOffset: -8 * 60
    }
})

2、设置不使用 UTC 标准时间

Highcharts.setOptions({
    global: {
        useUTC: false
    }
})

在线试一试

3、使用 Date.UTC 获取时间戳

series: [{
    data: [
        [Date.UTC(2017, 0, 1), 250],
        [Date.UTC(2017, 0, 2, 1, 0), 250],
        [Date.UTC(2017, 0, 2, 2, 0), 250],
    ]
}]

需要注意 Date.UTC(year, month, day, ...) 中的 month 是从 0 开始的,也就是 0 表示一月,11 表示十二月。

简单的解释

Highcharts 默认的时间是标准时间(即 UTC 时间),new Date 创建的时间是包含当前时区的,所以直接用会导致偏差,解决办法是 1 和 2,分别表示做时区调整和使用当前时区。方法 3 中 Date.UTC 则是创建标准时间。

分享到评论