将纪元更改为 Highcharts 中的相应时区并在 x 轴上显示时间

Changing the epoch to respective timezone in Highcharts and showing the time on x-axis

我有一些以毫秒为单位的纪元时间戳,我正在将它们传递给高图表中的 x 轴。 现在我有一个 select 按钮,其中提到了一些预定义的时区。例如:美国东部、英国、台湾、新加坡等。 所以我想要的是当用户 select 处于特定时区时,图表上的时间戳应显示该 selected 时区的当地时间。

为此,我编写了这个示例代码。

Highcharts.setOptions({      // This is for all plots, change Date axis to local time-zone
    global : {
    {{#if_eq tz "IST"}}
        useUTC : false
    {{/if_eq}}
    {{#if_eq tz "us-east"}}
        timezoneOffset: -5 * 60 
    {{/if_eq}}
    {{#if_eq tz "us-west"}}
        timezoneOffset: -7 * 60
    {{/if_eq}}
    {{#if_eq tz "uk"}}
        timezoneOffset: 1 * 60 
    {{/if_eq}}
    {{#if_eq tz "tw"}}
        timezoneOffset: 8 * 60  
    {{/if_eq}}
    {{#if_eq tz "sg"}}
        timezoneOffset: 8 * 60  
    {{/if_eq}}
    }
});

如果您 select IST,则此代码有效。时间戳被转换为我的本地时间。 但是当我 select 图表上的其他时区时,我得到的时间是错误的。我不知道我是否应该以秒为单位转换 timezoneOffset 并传递它或毫秒,或者我是否做错了。

如有任何帮助,我们将不胜感激。

PS:- 我正在使用 Handlebars 进行数据传递,所以请不要混淆。 谢谢

一些事情:

  • 您应该使用标准化的IANA time zone identifiers来识别每个时区。例如,使用 America/New_York,而不是 us-east

  • 不要尝试手动确定每个时区的时区偏移量,否则您很容易出错。

  • 时区偏移 随时间变化。这是由于标准时间和夏令时的变化。

  • 在 HighCharts 中执行此操作的更好方法是挂钩 getTimezoneOffset 函数。这是一个简单的函数,当传递时间戳时,returns 适当的时区偏移量。您需要实现该功能,使其 returns 在正确的时间为所选时区提供适当的偏移量。

  • 最简单的方法是整合 moment-timezone. There is an example of this here, which can also be found in the HighCharts documentation.