【数据可视化】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则是创建标准时间。

推荐阅读更多精彩内容