Moment.js предоставляет мощный механизм форматирования дат и времени через строковые шаблоны, позволяя полностью контролировать внешний вид результата при выводе, сериализации и подготовке данных для интерфейсов или API.
Форматирование в Moment.js основано на строке-шаблоне, где
специальные токены заменяются соответствующими частями даты. Метод
format() не изменяет исходный объект, а возвращает
строковое представление:
moment().format('YYYY-MM-DD HH:mm:ss');
Каждый символ или группа символов в строке формата интерпретируется как инструкция:
YYYY — полный годMM — месяц с ведущим нулёмDD — день месяцаHH — часы (24-часовой формат)mm — минутыss — секундыОтсутствие токена интерпретируется как обычный текст.
Работа с календарными компонентами даты чаще всего строится на следующих токенах:
YY — последние две цифры годаYYYY — полный годM — номер месяца без нуляMM — номер месяца с нулёмMMM — сокращённое название месяцаMMMM — полное название месяцаD — день месяцаDD — день месяца с нулёмDDD — день годаПример:
moment('2026-05-21').format('DD MMMM YYYY');
Результат:
21 May 2026
Для времени используется отдельный набор токенов:
H — часы (0–23)HH — часы с нулёмh — часы (1–12)hh — часы (1–12 с нулём)m — минутыmm — минуты с нулёмs — секундыss — секунды с нулёмA — AM/PM в верхнем регистреa — am/pm в нижнем регистреПример 12-часового формата:
moment().format('hh:mm:ss A');
При необходимости включить в формат обычный текст используется экранирование квадратными скобками:
moment().format('[Дата создания:] YYYY-MM-DD');
Результат:
Дата создания: 2026-05-21
Любой текст вне квадратных скобок может быть интерпретирован как токены, поэтому экранирование критично при смешанных форматах.
Сложные строки формируются через комбинацию токенов и текста:
moment().format('YYYY/MM/DD [время] HH:mm');
Подобный подход используется в логировании и системах аудита.
Часто используются предсобранные шаблоны:
moment().format('DD.MM.YYYY');
moment().format('DD.MM.YYYY HH:mm');
moment().format('YYYY-MM-DDTHH:mm:ss');
Последний вариант соответствует ISO-подобному представлению, но не
является строгим ISO 8601, если не использовать
toISOString().
Форматы тесно связаны с текущей локалью. Некоторые токены зависят от языка:
MMMM — полное название месяцаdddd — день неделиПример:
moment().locale('ru').format('dddd, D MMMM YYYY');
Результат:
четверг, 21 мая 2026
Локаль влияет только на текстовые элементы, но не изменяет числовые токены.
Для работы с днями недели используются специальные токены:
d — номер дня недели (0–6)dd — короткое обозначениеddd — сокращённое названиеdddd — полное названиеПример:
moment().format('dddd');
Moment.js позволяет контролировать вывод чисел:
Do — день месяца с порядковым суффиксом (1st, 2nd,
3rd)Qo — квартал с суффиксомПример:
moment().format('Do [day of] MMMM');
Хотя пользовательские форматы ориентированы на отображение, часто они используются для сериализации:
const payload = {
createdAt: moment().format('YYYY-MM-DD HH:mm:ss')
};
Однако при обмене данными предпочтительнее использовать ISO:
moment().toISOString();
Пользовательские форматы применяются не только при выводе, но и при разборе строки:
moment('21-05-2026', 'DD-MM-YYYY');
При этом формат определяет:
Строгий режим:
moment('21-05-2026', 'DD-MM-YYYY', true);
Третий параметр включает проверку соответствия формату без автоматических исправлений.
Moment.js позволяет передавать массив форматов для повышения гибкости:
moment('21/05/2026', ['DD-MM-YYYY', 'DD/MM/YYYY', 'YYYY-MM-DD']);
Парсинг выполняется последовательно до первого совпадения.
Хотя это не напрямую format(), поведение часто
используется совместно:
calendar() отображает относительные форматыПри построении систем логирования форматы часто стандартизируются:
'[LOG]' YYYY-MM-DD HH:mm:ss '[EVENT]' type
// Дата
YYYY-MM-DD
// Дата и время
YYYY-MM-DD HH:mm
// Человекочитаемый формат
DD MMMM YYYY
// Полный таймстамп
YYYY-MM-DD HH:mm:ss.SSS
// URL/ISO-подобный
YYYY-MM-DDTHH:mm:ssZ
При создании доменно-ориентированных представлений формат может включать условный текст:
moment().format('[Заказ создан:] DD.MM.YYYY [в] HH:mm');
Такие конструкции часто используются в интерфейсах CRM и административных панелях, где важна читаемость результата без дополнительной логики на стороне шаблонизатора.