首先请简单的看一下关于 时区 及 UTC 的定义,我们可以简单的得出以下两个认知:
- UTC 是世界标准时间,用于协调各国时间
- 中国的时区是 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
则是创建标准时间。