Moment.js — это библиотека для работы с датами и
временем в JavaScript, обеспечивающая удобное создание, парсинг,
форматирование и манипуляцию датами. Она решает множество проблем,
связанных с нативным объектом Date, таких как часовые
пояса, сложные форматы и локализация.
Создание объекта Moment может выполняться несколькими способами:
// Текущая дата и время
const now = moment();
// Конкретная дата
const birthday = moment("1990-12-17");
// С помощью отдельных компонентов
const customDate = moment({ year: 2026, month: 4, day: 22, hour: 15, minute: 30 });
Важно помнить, что месяцы в Moment.js индексируются с нуля, то есть
0 — это январь, а 11 — декабрь.
Форматирование в Moment.js гибкое и позволяет получать строковое представление даты в удобном виде. Основные методы:
const date = moment("2026-05-22T14:45:00");
// Форматирование по шаблону
date.format("YYYY-MM-DD HH:mm:ss"); // "2026-05-22 14:45:00"
// Отображение месяца буквами
date.format("DD MMMM YYYY"); // "22 мая 2026"
// Использование локализации
moment.locale('ru');
date.format('LLLL'); // "пятница, 22 мая 2026 г., 14:45"
Ключевые символы форматирования:
YYYY — полный год,MM — месяц с ведущим нулем,DD — день месяца с ведущим нулем,HH — часы 24-часового формата,mm — минуты,ss — секунды,dddd — полное название дня недели,MMM / MMMM — сокращённое / полное название
месяца.Moment.js позволяет создавать объекты даты из строк с указанием формата:
const date1 = moment("22-05-2026", "DD-MM-YYYY");
const date2 = moment("2026/05/22 14:45", "YYYY/MM/DD HH:mm");
Если формат строки совпадает с указанным, Moment корректно распознаёт
дату. В противном случае возвращается некорректный объект
(Invalid Date).
Moment.js предоставляет мощные инструменты для изменения даты:
let date = moment("2026-05-22");
// Добавление дней, месяцев, лет
date.add(5, 'days'); // 27 мая 2026
date.add(2, 'months'); // 27 июля 2026
date.add(1, 'years'); // 27 июля 2027
// Вычитание
date.subtract(3, 'days'); // 24 июля 2027
Допустимые единицы: years, months,
weeks, days, hours,
minutes, seconds.
Сравнение объектов Moment выполняется с помощью специальных методов:
const date1 = moment("2026-05-22");
const date2 = moment("2026-06-01");
date1.isBefore(date2); // true
date1.isAfter(date2); // false
date1.isSame(date2); // false
Также можно сравнивать с учётом единицы времени:
date1.isSame(date2, 'month'); // false
date1.isSame(date2, 'year'); // true
Moment.js поддерживает измерение разницы между датами через метод
diff:
const start = moment("2026-05-01");
const end = moment("2026-05-22");
const daysDiff = end.diff(start, 'days'); // 21
const monthsDiff = end.diff(start, 'months'); // 0
Метод diff возвращает целое число по указанной единице,
округляя вниз.
Moment.js полностью поддерживает международные форматы и локализацию:
moment.locale('fr');
const date = moment("2026-05-22");
date.format('LLLL'); // "vendredi 22 mai 2026 00:00"
Доступны сотни локалей, которые можно подключать через отдельные файлы.
Хотя базовый Moment.js не имеет встроенной поддержки диапазонов, библиотека Moment Range расширяет возможности:
const start = moment("2026-05-01");
const end = moment("2026-05-22");
const range = moment.range(start, end);
range.contains(moment("2026-05-10")); // true
range.diff('days'); // 21
Moment.js умеет конвертировать даты в JavaScript Date и обратно:
const jsDate = moment().toDate();
const momentDate = moment(new Date());
Также можно работать с UNIX-временем:
const unixTime = moment().unix(); // количество секунд с 1970-01-01
const fromUnix = moment.unix(unixTime); // обратно в Moment
Для работы с часовыми поясами используется расширение Moment Timezone:
const m = moment.tz("2026-05-22 14:00", "Europe/Moscow");
m.format(); // "2026-05-22T14:00:00+03:00"
m.tz("America/New_York").format(); // "2026-05-22T07:00:00-04:00"
Moment Timezone учитывает переход на летнее/зимнее время и позволяет выполнять точные преобразования между зонами.
Moment.js обеспечивает комплексную работу с датами и временем, поддерживает локализацию, временные зоны, удобное форматирование, сравнение и манипуляции с датами. Несмотря на появление нативного Temporal API, Moment.js остаётся популярным инструментом для проектов, где требуется совместимость и простота кода.
Её возможности особенно ценны при работе с приложениями, требующими точных расчётов дат и сложных временных операций.