Moment.js — это библиотека для работы с датами и временем в JavaScript, предоставляющая удобные методы для парсинга, форматирования, манипуляции и сравнения дат. Для использования Moment.js необходимо подключить библиотеку к проекту. Существует несколько способов:
// Через npm
npm install moment
// Подключение в проекте
const moment = require('moment');
// Через CDN в HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
После подключения можно создавать объекты Moment и выполнять с ними различные операции.
Объект Moment создаётся с помощью функции moment(). Она
принимает различные типы аргументов:
// Текущая дата и время
const now = moment();
// Конкретная дата
const date1 = moment("2026-05-22");
// Дата и время с форматом
const date2 = moment("2026-05-22 14:30", "YYYY-MM-DD HH:mm");
// Из объекта Date
const date3 = moment(new Date());
Ключевой момент: Moment автоматически распознаёт большинство стандартных форматов даты и времени, но при нестандартных форматах рекомендуется явно указывать шаблон для корректного парсинга.
Форматирование позволяет преобразовать объект Moment в строку нужного вида. Основные методы и шаблоны:
const now = moment();
// Полная дата
console.log(now.format("YYYY-MM-DD")); // 2026-05-22
// Дата и время
console.log(now.format("YYYY-MM-DD HH:mm:ss")); // 2026-05-22 14:30:15
// День недели
console.log(now.format("dddd")); // Пятница
// Месяц и день
console.log(now.format("MMMM Do")); // Май 22-й
Важное замечание: Шаблоны чувствительны к регистру:
MM — месяц, mm — минуты.
Moment.js предоставляет мощные методы для добавления и вычитания времени:
const today = moment();
// Добавление дней, месяцев, лет
const nextWeek = today.add(7, 'days');
const nextMonth = today.add(1, 'months');
const nextYear = today.add(1, 'years');
// Вычитание времени
const lastWeek = today.subtract(7, 'days');
Поддерживаются единицы времени:
years, y — годыmonths, M — месяцыweeks, w — неделиdays, d — дниhours, h — часыminutes, m — минутыseconds, s — секундыmilliseconds, ms — миллисекундыСовет: Методы add и
subtract изменяют исходный объект Moment, поэтому для
сохранения оригинальной даты следует использовать метод
clone().
Для проверки порядка дат можно использовать методы:
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
Для работы с часовыми поясами используется Moment Timezone (дополнение к Moment.js):
const moment = require('moment-timezone');
const moscowTime = moment.tz("2026-05-22 14:00", "Europe/Moscow");
const newYorkTime = moscowTime.clone().tz("America/New_York");
console.log(moscowTime.format()); // 2026-05-22T14:00:00+03:00
console.log(newYorkTime.format()); // 2026-05-22T07:00:00-04:00
Ключевой момент: Без Moment Timezone библиотека работает только с локальной и UTC временной зоной.
Метод moment() может использовать строгий режим для
точного соответствия формату:
const date = moment("22-05-2026", "DD-MM-YYYY", true);
console.log(date.isValid()); // true
const invalidDate = moment("05/22/2026", "DD-MM-YYYY", true);
console.log(invalidDate.isValid()); // false
Важно: В строгом режиме формат должен полностью соответствовать шаблону, иначе дата будет считаться недействительной.
Moment.js поддерживает множество локалей, что позволяет выводить дату на нужном языке:
moment.locale('ru');
const now = moment();
console.log(now.format('LLLL')); // пятница, 22 мая 2026 г., 14:30
Смена локали глобально влияет на все объекты Moment.
fromNow() — возвращает относительное время:const past = moment("2026-05-20");
console.log(past.fromNow()); // 2 дня назад
calendar() — отображает дату относительно текущего
времени в календарном виде:console.log(moment().calendar()); // Сегодня в 14:30
diff() — вычисляет разницу между датами:const date1 = moment("2026-05-22");
const date2 = moment("2026-06-01");
console.log(date2.diff(date1, 'days')); // 10
Moment.js корректно работает с ISO 8601:
const isoDate = moment("2026-05-22T14:30:00Z");
console.log(isoDate.format()); // 2026-05-22T14:30:00Z
Это упрощает обмен датами с API и внешними сервисами.
clone() для сохранения оригинала.Moment.js официально объявлен библиотекой в режиме поддержки (maintenance mode). Это означает:
Ключевой вывод: Moment.js остаётся стабильным и надёжным для существующих проектов, однако активного развития функционала не будет.