Работа с часовыми поясами и переходом на летнее время в Javascript

Мое одностраничное приложение javascript извлекает данные в формате JSON с помощью вызовов REST. Даты форматируются с использованием часового пояса UTC в стандартном формате ISO8601, например 2011-02-04T19: 31: 09Z .

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

Я знаю, как преобразовать строку UTC в дату. Я понимаю, что Javascript представляет даты только в местном часовом поясе.

Но у меня возникли проблемы с выяснением , как отображать дату, отформатированную для часового пояса, ОТЛИЧНОГО от местного часового пояса пользователя . Он должен учитывать летнее время на все даты. Внутренне я хочу обрабатывать все даты как UTC и преобразовывать только в строковое представление даты в другом часовом поясе во время отображения. Мне нужно отображать даты в часовом поясе, выбранном в профиле пользователя, а не в часовом поясе его браузера.

I ' Мы экспериментировали с сервером, отправляющим разницу смещения часового пояса в миллисекундах между часовым поясом браузера пользователя и часовым поясом профиля пользователя. Но я обнаружил, что не могу просто отправить одно значение смещения, но мне нужно отправить смещение для каждой даты, чтобы учесть различия в летнем времени.

Любые предложения или примеры кода о том, как отображать даты, отформатированные в различных часовых поясах? Варианты, которые я нашел до сих пор:

  1. Сервер отправляет даты в виде строк, уже отформатированных в правильном часовом поясе, и на клиенте не выполняется синтаксический анализ или манипуляции с датой. Это затрудняет выполнение определенных действий на клиенте, если не делает невозможным.
  2. Используйте такую ​​библиотеку, как https://github.com/mde/timezone-js , которая включает всю базу данных Olson TZ в Javascript. . Это означает более длительное время загрузки, большее использование памяти и т. Д.
  3. Отправлять клиенту значение timezoneOffsetMillis с каждой датой. Это приводит к беспорядочным данным JSON и неоптимальным интерфейсам REST.

Есть ли более простые или лучшие решения?

22
задан Tauren 5 February 2011 в 06:37
поделиться