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–31DD — 01–31moment().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 обеспечивает стабильное поведение форматов при условии корректного выбора токенов и локали, сохраняя предсказуемость результата при любых входных датах