首先请简单的看一下关于时区及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则是创建标准时间。