Основы форматирования

Moment.js предоставляет единый механизм преобразования объектов даты и времени в строковое представление через систему токенов форматирования. Основной инструмент для этого — метод format(), который принимает строку-шаблон и возвращает отформатированное значение даты.


Базовая задача форматирования заключается в превращении внутреннего представления даты в читаемый текст. В Moment.js это реализуется через:

moment().format();

Без параметров метод возвращает дату в ISO-подобном формате:

2026-05-21T14:30:00+06:00

Однако реальная сила метода раскрывается при использовании пользовательских шаблонов.


Система токенов форматирования

Форматирование в Moment.js основано на наборе специальных токенов. Каждый токен отвечает за конкретную часть даты.

Год

  • YYYY — полный год (2026)
  • YY — сокращённый год (26)
moment().format('YYYY');

Результат:

2026

Месяц

  • MM — месяц с ведущим нулём (01–12)
  • M — месяц без нуля (1–12)
  • MMMM — полное название месяца
  • MMM — сокращённое название месяца
moment().format('MMMM');

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

май

(при включённой локали)


День месяца

  • DD — день с ведущим нулём (01–31)
  • D — день без нуля (1–31)
moment().format('DD-MM-YYYY');

Результат:

21-05-2026

День недели

  • dddd — полное название дня недели
  • ddd — сокращённое название
moment().format('dddd');

Результат:

четверг

Часы, минуты, секунды

Moment.js поддерживает как 24-часовой, так и 12-часовой формат.

  • HH — часы (00–23)
  • hh — часы (01–12)
  • mm — минуты (00–59)
  • ss — секунды (00–59)
  • A — AM/PM
moment().format('HH:mm:ss');

Результат:

14:30:00

Комбинирование токенов в шаблонах

Форматирование становится полезным при комбинировании нескольких токенов в единую строку.

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

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

четверг, 21 май 2026, 14:30

Шаблон интерпретируется посимвольно: все символы, не являющиеся токенами, остаются без изменений.


Экранирование текста в форматах

Если необходимо включить фиксированный текст, используется квадратные скобки:

moment().format('[Дата:] DD-MM-YYYY');

Результат:

Дата: 21-05-2026

Любой текст внутри [] не интерпретируется как токены.


Форматирование времени с учётом локали

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

moment.locale('ru');
moment().format('dddd, MMMM');

Результат:

четверг, май

Изменение локали влияет только на текстовые элементы, не затрагивая числовые значения.


12-часовой формат и обозначение времени суток

При использовании hh важно добавлять индикатор времени суток:

moment().format('hh:mm A');

Результат:

02:30 PM

Без A результат будет неполным с точки зрения интерпретации времени.


Частые шаблоны форматирования

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

Дата в европейском формате

DD.MM.YYYY

Пример:

21.05.2026

Полная дата с временем

YYYY-MM-DD HH:mm:ss

Пример:

2026-05-21 14:30:00

Человекочитаемое представление

dddd, D MMMM YYYY

Пример:

четверг, 21 май 2026

Особенности интерпретации токенов

Moment.js строго различает регистр символов:

  • M — месяц
  • m — минуты

Ошибочное использование приводит к некорректному результату:

moment().format('MM:mm');

Результат:

05:30

Здесь первый токен — месяц, второй — минуты.


Форматирование с произвольными символами

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

moment().format('YYYY/MM/DD [время] HH:mm');

Результат:

2026/05/21 время 14:30

Форматы для хранения и передачи данных

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

moment().format('YYYY-MM-DDTHH:mm:ssZ');

Результат:

2026-05-21T14:30:00+06:00

Такой формат совместим с большинством API и баз данных.


Итоговые принципы работы с форматами

  • Формат задаётся строкой-шаблоном
  • Токены определяют части даты и времени
  • Регистр символов имеет критическое значение
  • Квадратные скобки защищают текст от интерпретации
  • Локаль влияет на текстовые элементы
  • Комбинации токенов позволяют строить любые форматы отображения