Изменение эпохи на соответствующий часовой пояс в Highcharts и отображение времени по оси X

У меня есть временные метки эпохи в миллисекундах, которые я передаю по оси x в highcharts. Теперь у меня есть кнопка выбора, в которой упоминаются некоторые предопределенные часовые пояса. Например: восток США, Великобритания, Тайвань, Сингапур и т. д. Итак, я хочу, чтобы когда пользователь выбирает определенный часовой пояс, временные метки на графике должны показывать местное время этого выбранного часового пояса.

Для этого я написал этот пример кода.

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}}
    }
});

Этот код работает, если вы выбираете IST. Временные метки преобразуются в мое местное время. Но время, которое я получаю, когда выбираю другой часовой пояс на графике, неверно. Я не знаю, должен ли я преобразовать timezoneOffset в секунды и передать его или миллисекунды, или я делаю это неправильно.

Любая помощь будет оценена по достоинству.

PS: - Я использую Handlebars для передачи данных, так что не запутайтесь. Спасибо


person Nikhil Tikoo    schedule 03.06.2016    source источник
comment
Разобрался с ошибкой. По сути, я неправильно поставил знак -. Добавление смещения неправильно. Получение правильного результата сейчас. :)   -  person Nikhil Tikoo    schedule 03.06.2016
comment
Ваш код небезопасен для перехода на летнее время. См. часовой пояс != offset в вики тега часового пояса.   -  person Matt Johnson-Pint    schedule 06.06.2016
comment
Также временные метки эпохи являются неправильным употреблением. Эпоха — это фиксированное значение, и существует несколько их. Вероятно, вы имеете в виду метки времени unix.   -  person Matt Johnson-Pint    schedule 06.06.2016
comment
@MattJohnson Да, я понял, что это не включает переход на летнее время. Любая идея, как включить летнее время в highcharts?   -  person Nikhil Tikoo    schedule 07.06.2016
comment
Вы пытались установить флаг UTC как ложный?   -  person Sebastian Bochan    schedule 08.06.2016
comment
@SebastianBochan Отключение флага UTC означает, что highcharts преобразует отметку времени unix в местное время. Что уже происходит. Я столкнулся с проблемами, когда я давал timezoneOffset. Потому что я подавал неверный знак. Таким образом, изменение знака решило проблему.   -  person Nikhil Tikoo    schedule 09.06.2016
comment
Вы правы, в любом случае спасибо за отзыв ;)   -  person Sebastian Bochan    schedule 09.06.2016


Ответы (1)


Несколько вещей:

  • Вы должны использовать стандартные идентификаторы часовых поясов IANA для идентификации каждого часового пояса. Например, используйте America/New_York, а не us-east.

  • Не пытайтесь определить смещение часового пояса для каждой зоны вручную, иначе легко могут возникнуть ошибки.

  • Смещение часовых поясов меняется со временем. Это связано как с изменением стандартного времени, так и с переходом на летнее время.

  • Лучший способ сделать это в HighCharts — подключить функцию getTimezoneOffset. Это простая функция, которая при передаче метки времени возвращает соответствующее смещение часового пояса. Вам нужно будет реализовать функцию таким образом, чтобы она возвращала соответствующее смещение для выбранного часового пояса в нужное время.

  • Самый простой способ сделать это — интегрировать moment-timezone. Пример этого здесь, который также можно найти в документации HighCharts.

person Matt Johnson-Pint    schedule 07.06.2016
comment
Большое спасибо. Это было хорошее понимание. Использовал библиотеку момент-часовой пояс. Я правильно понимаю время часового пояса. Надеюсь, он позаботится и о переходе на летнее время. Спасибо еще раз. :) - person Nikhil Tikoo; 09.06.2016
comment
Да, это заботится о переходе на летнее время. - person Matt Johnson-Pint; 09.06.2016
comment
Спасибо, Мэтт. Кажется, работает нормально. Я получаю время в соответствующих часовых поясах, используя момент-часовой пояс. (пальцы вверх) - person Nikhil Tikoo; 10.06.2016