Moment.js предоставляет мощные средства для работы с датами и временем, включая поддержку временных зон через плагин moment-timezone. Конвертация между временными зонами является одной из наиболее востребованных задач при работе с глобальными приложениями, где пользователи могут находиться в разных географических регионах.
Временная зона определяет смещение относительно всемирного координированного времени (UTC). В Moment.js работа с временными зонами разделяется на несколько ключевых понятий:
Europe/Moscow или
America/New_York.Moment.js позволяет легко переключаться между этими уровнями представления времени, сохраняя точность и корректность расчётов.
Для преобразования локального времени в UTC используется метод
.utc():
const moment = require('moment');
let localTime = moment('2026-05-21 15:30'); // локальное время
let utcTime = localTime.utc();
console.log(localTime.format()); // 2026-05-21T15:30:00+03:00 (например, Москва)
console.log(utcTime.format()); // 2026-05-21T12:30:00Z
Ключевые моменты:
.utc() не изменяет исходный объект,
если используется без присваивания..format() на объекте UTC добавляется
символ Z, обозначающий время в UTC.Для работы с часовыми поясами необходимо подключить плагин moment-timezone:
const moment = require('moment-timezone');
let moscowTime = moment.tz('2026-05-21 15:30', 'Europe/Moscow');
let newYorkTime = moscowTime.clone().tz('America/New_York');
console.log(moscowTime.format()); // 2026-05-21T15:30:00+03:00
console.log(newYorkTime.format()); // 2026-05-21T08:30:00-04:00
Особенности конвертации:
.tz() создаёт новый объект с указанной временной
зоной..clone() позволяет сохранить исходное
значение без изменения.Если дата приходит в формате с часовым поясом, Moment.js может её корректно распознать:
let dateString = '2026-05-21T15:30:00+03:00';
let m = moment.parseZone(dateString);
console.log(m.format()); // 2026-05-21T15:30:00+03:00
console.log(m.utc().format()); // 2026-05-21T12:30:00Z
Особенности метода .parseZone():
Для вывода времени в локальной зоне пользователя используется метод
.local():
let utcTime = moment.utc('2026-05-21T12:30:00Z');
let localTime = utcTime.local();
console.log(localTime.format()); // 2026-05-21T15:30:00+03:00 (Москва)
Особенности:
.local() преобразует UTC-время в локальное, учитывая
системный часовой пояс.Moment.js позволяет легко вычислять разницу времени между зонами:
let tokyo = moment.tz('2026-05-21 15:30', 'Asia/Tokyo');
let london = tokyo.clone().tz('Europe/London');
let diffHours = london.utcOffset() - tokyo.utcOffset();
console.log(diffHours); // Разница в минутах между зонами
Особенности расчётов:
.utcOffset() возвращает смещение в минутах..clone().Работа с Moment.js и временными зонами позволяет создавать приложения с точным отображением времени для любой точки мира, обеспечивая корректные конвертации и удобство вычислений.