Форматирование длинных дат

Moment.js использует систему токенов форматирования, где каждый символ или группа символов отвечает за конкретную часть даты. При построении длинных дат основная задача заключается в объединении нескольких токенов: дня недели, числа месяца, полного названия месяца и года в единый читаемый формат.

Ключевое значение имеют следующие элементы:

  • dddd — полное название дня недели
  • D — день месяца без ведущего нуля
  • Do — день месяца с порядковым суффиксом (1st, 2nd, 3rd и т.д. в английской локали)
  • MMMM — полное название месяца
  • MMM — сокращённое название месяца
  • YYYY — четырёхзначный год

Базовая структура длинной даты

Типичная длинная дата включает максимум смысловых компонентов:

moment().format('dddd, D MMMM YYYY');

Результат (в английской локали):

Tuesday, 7 January 2026

Такая структура считается канонической для отображения полной календарной информации без времени суток.


Локализация длинных дат

Moment.js активно использует локали для перевода названий дней и месяцев. При переключении на русский язык форматирование сохраняет структуру, но меняет словесные элементы.

moment.locale('ru');

moment().format('dddd, D MMMM YYYY');

Пример результата:

вторник, 7 января 2026

Особенность локалей заключается в том, что:

  • названия месяцев склоняются (января, февраля, марта)
  • дни недели приводятся к локализованной форме
  • структура формата остаётся неизменной

Полные и расширенные форматы

Длинные даты часто требуют дополнительной детализации, включая падежные формы и более выразительное представление.

Полный формат с порядковым числом

moment().format('dddd, Do MMMM YYYY');

Пример:

Tuesday, 7th January 2026

В русской локали Do не используется так активно, поскольку порядковые суффиксы не применяются в стандартной форме.


Работа с днями недели

Токен dddd возвращает полное название дня недели, что критично для календарных интерфейсов и отчётных систем.

moment('2026-01-07').format('dddd');

Результат:

вторник

При построении длинных дат день недели почти всегда размещается в начале строки для повышения читаемости.


Формирование расширенных календарных строк

Длинные даты часто включают дополнительные текстовые элементы, которые комбинируются с форматированием Moment.js:

moment().format('dddd, D MMMM YYYY года');

Результат:

вторник, 7 января 2026 года

Здесь слово «года» добавляется как статическая часть строки, не зависящая от токенов библиотеки.


Различия токенов для месяца

Одной из частых ошибок является путаница между регистрами:

  • MM — месяц в числовом виде (01–12)
  • MMMM — полное название месяца
  • MMM — сокращённое название месяца

Пример:

moment().format('DD MM YYYY');     // 07 01 2026
moment().format('DD MMM YYYY');    // 07 Jan 2026
moment().format('DD MMMM YYYY');   // 07 January 2026

При построении длинных дат числовой формат месяца используется редко, так как снижает читаемость.


Форматы с нулевым и ненулевым днём

Moment.js различает D и DD:

  • D — 1–31
  • DD — 01–31
moment().format('dddd, DD MMMM YYYY');

Результат:

вторник, 07 января 2026

В длинных датах нулевое заполнение обычно применяется для строгих табличных или архивных представлений.


Составные шаблоны для универсальных форматов

При необходимости единообразного отображения в разных регионах используется комбинированный формат:

moment().format('dddd, D MMMM YYYY, HH:mm');

Результат:

вторник, 7 января 2026, 14:35

Хотя время не относится напрямую к «длинной дате», оно часто включается в единый строковый шаблон.


Влияние локали на структуру длинной даты

Некоторые локали изменяют не только слова, но и порядок элементов. Например, в английской версии распространён формат:

Tuesday, January 7, 2026

Он формируется так:

moment().format('dddd, MMMM D, YYYY');

Различие между языковыми традициями требует изменения порядка токенов, а не только их перевода.


Использование статических символов в форматах

Moment.js позволяет свободно добавлять любые разделители:

moment().format('dddd — D MMMM YYYY');

Результат:

вторник — 7 января 2026

Часто применяются:

  • запятые
  • тире
  • точки
  • текстовые вставки

Типовые шаблоны длинных дат

На практике используются устойчивые комбинации:

Стандартная русская форма

'dddd, D MMMM YYYY года'

Табличный формат

'DD.MM.YYYY'

Описательный формат

'dddd, D MMMM YYYY, HH:mm'

Английская расширенная форма

'dddd, MMMM D, YYYY'

Особенности форматирования в зависимости от контекста

При работе с длинными датами важны три аспекта:

  • читаемость строки
  • локализация словесных компонентов
  • единообразие структуры во всём интерфейсе

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