Moment.js — это библиотека для работы с датами и временем в JavaScript, которая упрощает создание, парсинг, форматирование и манипуляцию датами. В основе Moment.js лежит объект moment, представляющий конкретный момент времени.
Создание даты осуществляется несколькими способами:
// Текущая дата и время
const now = moment();
// Создание даты из строки
const dateFromString = moment("2026-05-22");
// Создание даты с указанием формата
const dateWithFormat = moment("22-05-2026", "DD-MM-YYYY");
// Создание даты с использованием компонентов
const dateFromComponents = moment({ year: 2026, month: 4, day: 22 });
Важно помнить, что месяцы в Moment.js нумеруются с 0 (январь = 0, декабрь = 11).
Moment.js предоставляет мощные возможности для форматирования дат с
помощью метода .format(). Формат задается через строку, где
специальные символы обозначают компоненты даты:
const date = moment("2026-05-22");
date.format("YYYY-MM-DD"); // 2026-05-22
date.format("DD/MM/YYYY"); // 22/05/2026
date.format("dddd, MMMM Do YYYY"); // пятница, Май 22-й 2026
Ключевые символы форматирования:
YYYY — полный год (2026)YY — последние две цифры года (26)MM — месяц с ведущим нулем (05)M — месяц без ведущего нуля (5)DD — день месяца с ведущим нулем (22)D — день месяца без ведущего нуля (22)dddd — полное название дня недели (пятница)Do — день месяца с суффиксом (22-й)Форматирование позволяет легко превращать даты в строки для отображения в интерфейсе.
Парсинг даты из строки требует указания формата, если он
нестандартный. Метод moment(string, format) пытается
интерпретировать строку согласно формату.
const date = moment("22-05-2026", "DD-MM-YYYY");
console.log(date.isValid()); // true
Метод isValid() проверяет корректность даты, что полезно
при обработке пользовательского ввода.
Moment.js позволяет изменять дату без необходимости вручную вычислять месяцы или годы. Основные методы:
add(value, unit) — прибавлениеsubtract(value, unit) — вычитаниеstartOf(unit) — начало периодаendOf(unit) — конец периодаconst date = moment("2026-05-22");
date.add(5, "days"); // 2026-05-27
date.subtract(1, "months"); // 2026-04-27
date.startOf("month"); // 2026-04-01
date.endOf("year"); // 2026-12-31
Единицы измерения (unit):
years, y — годыmonths, M — месяцыweeks, w — неделиdays, d — дниhours, h — часыminutes, m — минутыseconds, s — секундыmilliseconds, ms — миллисекундыДля вычисления разницы между датами используется метод
diff(). Он возвращает разницу в указанной единице
времени:
const start = moment("2026-05-01");
const end = moment("2026-05-22");
console.log(end.diff(start, "days")); // 21
console.log(end.diff(start, "weeks")); // 3
console.log(end.diff(start, "months")); // 0
Метод diff() учитывает целые единицы времени. Для более
точного расчета можно использовать дробные значения:
console.log(end.diff(start, "weeks", true)); // 3.0
Moment.js поддерживает локализацию дат для разных языков. Локаль
задается методом locale():
moment.locale("ru"); // русский язык
const date = moment("2026-05-22");
console.log(date.format("LLLL")); // пятница, 22 мая 2026 г., 00:00
Локализация влияет на названия месяцев, дней недели и формат вывода.
Для работы с часовыми поясами используется Moment Timezone — расширение Moment.js.
const m = moment.tz("2026-05-22 12:00", "Europe/Moscow");
console.log(m.format()); // 2026-05-22T12:00:00+03:00
Метод tz() позволяет конвертировать дату в другой
часовой пояс:
const nyTime = m.clone().tz("America/New_York");
console.log(nyTime.format()); // 2026-05-22T05:00:00-04:00
Moment.js предоставляет удобные методы для сравнения:
isBefore() — проверка, что дата раньше другойisAfter() — проверка, что дата позже другойisSame() — проверка равенства датconst date1 = moment("2026-05-22");
const date2 = moment("2026-05-23");
console.log(date1.isBefore(date2)); // true
console.log(date2.isAfter(date1)); // true
console.log(date1.isSame(date2)); // false
Moment.js позволяет конвертировать даты в разные типы:
.toDate() — объект JavaScript Date.toISOString() — ISO 8601 строка.unix() — метка времени в секундах.valueOf() — метка времени в миллисекундахconst date = moment("2026-05-22");
console.log(date.toDate()); // Fri May 22 2026 00:00:00 GMT+0300
console.log(date.toISOString()); // 2026-05-21T21:00:00.000Z
console.log(date.unix()); // 1763737200
console.log(date.valueOf()); // 1763737200000
Moment.js поддерживает цепочку вызовов, что делает код компактным:
const formattedDate = moment()
.add(3, "days")
.startOf("day")
.format("YYYY-MM-DD HH:mm:ss");
console.log(formattedDate); // 2026-05-25 00:00:00
Moment.js хранит объект даты как мутабельный объект,
поэтому методы изменяют исходный объект. Для работы с чистыми функциями
рекомендуется создавать клоны с помощью clone(), чтобы
избежать неожиданных изменений:
const original = moment("2026-05-22");
const copy = original.clone().add(1, "month");
console.log(original.format("YYYY-MM-DD")); // 2026-05-22
console.log(copy.format("YYYY-MM-DD")); // 2026-06-22
Moment.js предоставляет полный набор инструментов для работы с датами, включая создание, форматирование, манипуляции, локализацию, временные зоны и сравнение. Его основной принцип — объект moment, который инкапсулирует дату и время, обеспечивая удобные методы для любых операций с датами. Такой подход делает работу с датами в JavaScript значительно проще и безопаснее по сравнению с нативным объектом Date.