Как вы вычисляете, влияет ли на определенное время в определенном часовом поясе переход на летнее время с помощью JavaScript?

Я знаю, что new Date().getTimezoneOffset() учитывает часовой пояс и летнее время локального пользователя, но как рассчитать текущее местное время, скажем, в Тимбукту для произвольного времени в будущем?


person Mark    schedule 02.05.2012    source источник


Ответы (3)


JavaScript не имеет встроенной в язык базы данных часовых поясов (как видно из спецификации). Вместо этого у него есть только понятие «местное время» и «время UTC», при этом существует только один местный часовой пояс.

Возможно, есть браузерный API для получения базы данных часовых поясов, но я никогда о нем не слышал. Есть некоторые сторонние проекты, которые взаимодействуют с такими базами данных; быстрый поиск выдает timezone-js.

person Domenic    schedule 02.05.2012

Я сомневаюсь, что существует какой-либо алгоритм, который мог бы дать вам то, что вы хотите. Страны мира часто предпочитают не следовать стандартным правилам часового пояса. Хуже того, даты перехода на летнее время отличаются.

Есть 3 источника, которые я могу проверить:

Jeppesen, дочерняя компания Boeing, является в основном гражданским поставщиком аэронавигационной информации для всего мира. Я только что проверил свое старое руководство по эксплуатации Jeppesen, которое перестало получать еженедельные обновления, когда я вышел на пенсию 13 лет назад. В нем указаны часовые пояса для всех крупных аэропортов мира и даты их перехода на летнее время. Перейдите здесь для получения контактной информации. Я подозреваю, что к настоящему времени он легко доступен в электронном виде, но Jeppesen ничего не раздает бесплатно.

Я думаю, что ИКАО, Международная организация гражданской авиации (теперь часть ООН), я думаю, сохранит эту информацию, но я не уверен в данных DST. Их данные, как я полагаю, доступны либо бесплатно, либо за символическую плату.

IATA, Международная ассоциация воздушного транспорта, также может хранить эти данные.

Я думаю, что последние две организации могли бы положительно ответить на простой запрос URL-адреса с этими данными, если они знают о нем.

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

Кроме того, проверьте это и другие, которые вы увидите, если используете Google "данные о часовом поясе авиакомпании и летнем времени".

person Terry    schedule 02.05.2012

Самая простая часть — это учет часовых поясов. Вы можете найти часовой пояс по умолчанию (+0), просто вычитая часовой пояс * 60 * 60 секунд из даты, а затем добавляя новый часовой пояс * 60 * 60 к дате.

Тогда это просто вопрос времени, которое вы хотите, используя:

d = new Date(year, month, day, hours, minutes, seconds, milliseconds)
person DanRedux    schedule 02.05.2012
comment
Да, это самая простая часть :) Как насчет перехода на летнее время? - person Mark; 02.05.2012