В Moment.js форматирование и разбор дат строятся вокруг системы
токенов — специальных строковых маркеров, которые описывают, как именно
интерпретировать или отображать компоненты даты и времени. Эти токены
используются в методах format() и parse(), а
также в ряде вспомогательных функций, связанных с локализацией и
временем.
Токены в Moment.js — это строго определённые шаблоны, каждый из которых соответствует конкретной части даты или времени. Например:
YYYY — год в четырёхзначном форматеMM — месяц с ведущим нулёмDD — день месяцаHH — часы в 24-часовом форматеmm — минутыss — секундыТокены чувствительны к регистру. MM (месяц) и
mm (минуты) — разные сущности.
Работа с годом представлена несколькими вариантами, отличающимися количеством цифр и форматом вывода:
YYYY — полный год (например,
2026)YY — последние две цифры года
(26)Y — год по ISO-8601 (используется
реже)Пример форматирования:
moment().format('YYYY');
moment().format('YY');
Особенность YYYY заключается в том, что он всегда
возвращает четырёхзначное значение, даже для исторических дат, если они
поддерживаются библиотекой.
Месяцы в Moment.js представлены несколькими уровнями детализации:
M — месяц без ведущего нуля
(1–12)MM — месяц с ведущим нулём
(01–12)MMM — сокращённое название месяца
(Jan, Feb)MMMM — полное название месяца
(January, February)Пример:
moment().format('MM');
moment().format('MMM');
moment().format('MMMM');
При использовании текстовых форм (MMM,
MMMM) учитывается локализация, что позволяет выводить
названия месяцев на разных языках.
Для работы с днём месяца используются следующие токены:
D — день месяца
(1–31)DD — день с ведущим нулём
(01–31)Do — порядковый день месяца
(1st, 2nd, 3rd и т.д.)Особенность Do заключается в том, что он использует
порядковые суффиксы, зависящие от локали:
moment().format('Do MMMM');
Дни недели представлены как числовыми, так и текстовыми токенами:
d — день недели (0–6, где 0 —
воскресенье)dd — сокращённое название
(Su, Mo)ddd — более длинное сокращение
(Sun, Mon)dddd — полное название
(Sunday, Monday)Пример:
moment().format('dddd');
moment().format('ddd');
Текстовые представления полностью зависят от локализации.
Moment.js поддерживает два формата часов:
H — 24-часовой формат без нуля
(0–23)HH — 24-часовой формат с нулём
(00–23)h — 12-часовой формат
(1–12)hh — 12-часовой формат с нулёмk — 24-часовой формат (1–24)kk — 24-часовой формат с ведущим нулём
(01–24)m — минуты без нуляmm — минуты с нулёмs — секунды без нуляss — секунды с нулёмПример:
moment().format('HH:mm:ss');
Для работы с миллисекундами используются:
S — сотые доли секунды (0–9)SS — десятки миллисекунд (00–99)SSS — полные миллисекунды
(000–999)Пример:
moment().format('SSS');
Для 12-часового формата времени применяются:
A — AM/PM в верхнем регистреa — am/pm в нижнем регистреmoment().format('hh:mm A');
Локализация влияет на представление этих значений, особенно в языках, где традиционно используется 24-часовой формат.
Moment.js предоставляет несколько токенов для работы с часовыми поясами:
Z — смещение от UTC в формате
+05:00ZZ — смещение без двоеточия
(+0500)Пример:
moment().format('Z');
Эти токены особенно важны при работе с API и синхронизацией данных между системами.
Некоторые токены напрямую зависят от языка:
MMMM — название месяцаdddd — день неделиDo — порядковые числительныеA / a — обозначение времени сутокMoment.js использует локали, подключаемые отдельно, что позволяет изменять форматирование без изменения кода.
Если требуется вывести символы, которые совпадают с токенами, используется экранирование с помощью квадратных скобок:
moment().format('[Today is] YYYY-MM-DD');
Содержимое в [] не интерпретируется как токены и
выводится буквально.
Токены используются не только для форматирования, но и для разбора строк:
Invalid date)Пример:
moment('2026-05-21', 'YYYY-MM-DD');
При строгом режиме парсинга учитывается точное соответствие:
moment('21/05/2026', 'DD/MM/YYYY', true);
Третий параметр true включает strict parsing.
На практике токены редко используются по отдельности. Чаще всего они комбинируются в сложные шаблоны:
moment().format('dddd, Do MMMM YYYY, HH:mm:ss Z');
Такой шаблон включает:
dddd)Do)MMMM)YYYY)HH:mm:ss)Z)Если Moment.js встречает неизвестный токен:
Invalid date при строгом режимеПример:
moment().format('YYYY-QQ-MM');
Здесь QQ не является валидным токеном и будет обработан
как текст.
Токены, возвращающие текст, полностью зависят от активной локали:
Изменение локали:
moment.locale('ru');
moment().format('dddd, Do MMMM');
В результате форматирование адаптируется под правила выбранного языка.
Хотя система токенов удобна, она имеет особенности:
Несмотря на это, токены остаются центральным механизмом работы с датами в Moment.js и определяют весь процесс преобразования даты в строку и обратно.