Токены форматирования для года, месяца, дня

Форматирование дат в 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 относится к дню месяца, а не к дню недели.
  • Токены чувствительны к регистру, и их нельзя произвольно изменять.
  • Локализация влияет только на текстовые представления (MMMM, MMM, Do), но не на числовые значения.

Корректное использование токенов позволяет формировать предсказуемые и читаемые строки дат, независимо от региона и настроек языка.