Форматирование дат в Moment.js основано на наборе токенов, которые подставляются в строку формата и преобразуются в конкретные значения даты. Для работы с годом, месяцем и днём используются отдельные группы токенов, отличающиеся количеством символов и поведением при форматировании.
Токены года определяют, как будет отображаться календарный год: полностью или в сокращённом виде.
YYYY Четырёхзначное представление года. Используется для полного отображения календарного года без сокращений.
moment().format('YYYY'); // 2026
Применяется в большинстве случаев, когда требуется однозначное и точное отображение года.
YY Двухзначное представление года. Отображает последние две цифры года.
moment().format('YY'); // 26
Используется в компактных форматах дат, где полное значение года избыточно.
Особенность токенов года заключается в их строгой зависимости от календарной системы: Moment.js опирается на стандартный григорианский календарь, поэтому значение всегда соответствует текущему календарному году системы.
Месяцы в Moment.js имеют несколько вариантов отображения: числовой формат, сокращённое название и полное название.
MM Двузначное числовое представление месяца (с ведущим нулём).
moment().format('MM'); // 05
Диапазон значений: от 01 до 12.
M Числовое представление месяца без ведущего нуля.
moment().format('M'); // 5
Используется в случаях, когда формат не требует фиксированной ширины поля.
MMMM Полное название месяца.
moment().format('MMMM'); // May
Названия зависят от локали. При смене языка изменяется и отображение:
moment.locale('ru');
moment().format('MMMM'); // май
MMM Сокращённое название месяца.
moment().format('MMM'); // May
или при русской локали:
moment.locale('ru');
moment().format('MMM'); // мая (или сокращённая форма в зависимости от локали)
Месяцы в Moment.js нумеруются с нуля во внутренних структурах (0–11), однако при форматировании всегда выводится человекочитаемый диапазон 1–12.
Токены дня отвечают за отображение числа месяца и его позицию в календарной системе.
DD Двузначное число дня месяца.
moment().format('DD'); // 21
Диапазон: 01–31.
D Число дня месяца без ведущего нуля.
moment().format('D'); // 21
Используется в кратких форматах дат.
Do Порядковый день месяца с суффиксом (английский формат).
moment().format('Do'); // 21st, 1st, 2nd
Пример:
moment('2026-05-01').format('Do'); // 1st
moment('2026-05-02').format('Do'); // 2nd
moment('2026-05-03').format('Do'); // 3rd
Суффиксы зависят от локали и правил языка.
Основная сила Moment.js проявляется при объединении токенов в единую строку формата.
Пример стандартного формата ISO-подобного отображения:
moment().format('YYYY-MM-DD'); // 2026-05-21
Формат с текстовым месяцем:
moment().format('DD MMMM YYYY'); // 21 May 2026
Локализованный вариант:
moment.locale('ru');
moment().format('D MMMM YYYY'); // 21 май 2026
Краткий числовой формат:
moment().format('D.M.YY'); // 21.5.26
Форматы могут включать любые разделители: дефисы, точки, пробелы, слэши.
moment().format('YYYY/MM/DD'); // 2026/05/21
moment().format('DD-MM-YYYY'); // 21-05-2026
При работе с токенами даты важно учитывать несколько технических особенностей:
MM всегда обозначает месяц, а mm — минуты
(ошибка в регистре приводит к неверному результату).DD относится к дню месяца, а не к дню недели.Корректное использование токенов позволяет формировать предсказуемые и читаемые строки дат, независимо от региона и настроек языка.