Я знаю, что new Date().getTimezoneOffset()
учитывает часовой пояс и летнее время локального пользователя, но как рассчитать текущее местное время, скажем, в Тимбукту для произвольного времени в будущем?
Как вы вычисляете, влияет ли на определенное время в определенном часовом поясе переход на летнее время с помощью JavaScript?
Ответы (3)
JavaScript не имеет встроенной в язык базы данных часовых поясов (как видно из спецификации). Вместо этого у него есть только понятие «местное время» и «время UTC», при этом существует только один местный часовой пояс.
Возможно, есть браузерный API для получения базы данных часовых поясов, но я никогда о нем не слышал. Есть некоторые сторонние проекты, которые взаимодействуют с такими базами данных; быстрый поиск выдает timezone-js.
Я сомневаюсь, что существует какой-либо алгоритм, который мог бы дать вам то, что вы хотите. Страны мира часто предпочитают не следовать стандартным правилам часового пояса. Хуже того, даты перехода на летнее время отличаются.
Есть 3 источника, которые я могу проверить:
Jeppesen, дочерняя компания Boeing, является в основном гражданским поставщиком аэронавигационной информации для всего мира. Я только что проверил свое старое руководство по эксплуатации Jeppesen, которое перестало получать еженедельные обновления, когда я вышел на пенсию 13 лет назад. В нем указаны часовые пояса для всех крупных аэропортов мира и даты их перехода на летнее время. Перейдите здесь для получения контактной информации. Я подозреваю, что к настоящему времени он легко доступен в электронном виде, но Jeppesen ничего не раздает бесплатно.
Я думаю, что ИКАО, Международная организация гражданской авиации (теперь часть ООН), я думаю, сохранит эту информацию, но я не уверен в данных DST. Их данные, как я полагаю, доступны либо бесплатно, либо за символическую плату.
IATA, Международная ассоциация воздушного транспорта, также может хранить эти данные.
Я думаю, что последние две организации могли бы положительно ответить на простой запрос URL-адреса с этими данными, если они знают о нем.
Кроме того, если удастся связаться с любым диспетчером авиакомпании, работающим с международными рейсами, у них должна быть эта информация.
Кроме того, проверьте это и другие, которые вы увидите, если используете Google "данные о часовом поясе авиакомпании и летнем времени".
Самая простая часть — это учет часовых поясов. Вы можете найти часовой пояс по умолчанию (+0), просто вычитая часовой пояс * 60 * 60 секунд из даты, а затем добавляя новый часовой пояс * 60 * 60 к дате.
Тогда это просто вопрос времени, которое вы хотите, используя:
d = new Date(year, month, day, hours, minutes, seconds, milliseconds)