moment-timezone — это расширение для библиотеки
Moment.js, которое добавляет возможность работы с часовыми поясами. Оно
позволяет корректно конвертировать даты и время между различными
часовыми зонами, учитывать переходы на летнее и зимнее время, а также
использовать актуальные данные о временных смещениях.
Для использования moment-timezone в проектах на Node.js
рекомендуется установка через менеджер пакетов npm. Команда выглядит
следующим образом:
npm install moment-timezone
После установки библиотеку можно подключить в коде:
const moment = require('moment-timezone');
Для проектов с использованием ES-модулей подключение будет следующим:
import moment from 'moment-timezone';
В случае использования moment-timezone в браузере можно
подключить библиотеку через CDN. Для этого необходимо добавить тег
<script> в HTML-файл:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.43/moment-timezone-with-data.min.js"></script>
Файл moment-timezone-with-data.min.js содержит все
необходимые данные о часовых поясах, что упрощает работу без
дополнительной настройки.
moment-timezone использует базу данных IANA для часовых
зон, которая обновляется по мере изменений в законодательстве. Для
актуальности данных рекомендуется периодически обновлять пакет:
npm update moment-timezone
Встроенные данные можно проверить и загрузить только необходимые зоны, чтобы уменьшить размер библиотеки. Например, подключение только для США:
const moment = require('moment-timezone/builds/moment-timezone-with-data-1970-2030.min.js');
moment-timezone работает только в связке с Moment.js.
После подключения можно создавать объекты даты и времени с учётом
временной зоны:
let moscowTime = moment.tz("2026-05-21 12:00", "Europe/Moscow");
console.log(moscowTime.format()); // "2026-05-21T12:00:00+03:00"
Метод .tz() позволяет назначить временную зону, отличную
от локальной системы.
Для работы с зонами можно получить список всех поддерживаемых временных зон:
console.log(moment.tz.names());
С помощью этого метода легко убедиться, что выбранная зона корректно поддерживается библиотекой.
Для больших проектов рекомендуется использовать минимальный набор данных о зонах, чтобы уменьшить размер загружаемых скриптов и ускорить работу. Доступны варианты с выборкой зон по диапазону лет, что полезно для серверных приложений с ограничениями по памяти.
moment-timezone поддерживает все версии Moment.js
начиная с 2.0.0. Важно следить за совместимостью версий, особенно при
обновлении Moment.js, чтобы избежать ошибок при работе с временными
зонами.
После установки и подключения библиотеки можно проверить её работоспособность простым примером:
const now = moment.tz("America/New_York");
console.log(now.format("YYYY-MM-DD HH:mm:ss Z")); // вывод текущего времени в Нью-Йорке
Если библиотека корректно установлена, команда вернёт дату и время с правильным смещением относительно UTC.
Для проектов, где важно, чтобы данные о временных зонах всегда были доступны локально, используется версия с встроенными данными:
import moment from 'moment-timezone/builds/moment-timezone-with-data.min.js';
Эта сборка не требует подключения к интернету и содержит все зоны и исторические переходы.
База часовых зон меняется регулярно, поэтому рекомендуется следить за
релизами moment-timezone и обновлять библиотеку вместе с
обновлением Moment.js. Использование актуальных данных предотвращает
ошибки при расчётах времени и планировании событий в разных странах.