В библиотеке Moment.js токены используются для форматирования и разбора дат. Комбинирование токенов позволяет создавать сложные шаблоны отображения даты и времени, адаптированные под требования интерфейса, локали или бизнес-логики.
Одиночные токены отвечают за отдельные части даты:
| Токен | Значение |
|---|---|
YYYY |
Год |
MM |
Месяц |
DD |
День |
HH |
Часы |
mm |
Минуты |
ss |
Секунды |
Комбинация нескольких токенов формирует полноценный шаблон.
const moment = require('moment');
const date = moment();
console.log(date.format('YYYY-MM-DD'));
Результат:
2026-05-21
Здесь используется комбинация:
YYYY — полный годMM — месяцDD — деньСимвол - не является токеном и выводится как обычный
текст.
console.log(
moment().format('YYYY-MM-DD HH:mm:ss')
);
Результат:
2026-05-21 14:37:52
Комбинация включает:
| Токен | Описание |
|---|---|
YYYY |
Год |
MM |
Месяц |
DD |
День |
HH |
Часы в 24-часовом формате |
mm |
Минуты |
ss |
Секунды |
Токены можно комбинировать с любыми разделителями.
moment().format('DD.MM.YYYY');
Результат:
21.05.2026
moment().format('DD/MM/YYYY');
Результат:
21/05/2026
moment().format('DD - MM - YYYY');
Результат:
21 - 05 - 2026
Обычный текст можно смешивать с токенами.
moment().format('Сегодня: DD.MM.YYYY');
Результат:
Сегодня: 21.05.2026
Однако некоторые символы могут быть восприняты как токены. Для безопасного вывода текста используются квадратные скобки.
moment().format('[Дата:] DD.MM.YYYY');
Результат:
Дата: 21.05.2026
Несколько блоков:
moment().format('[Год:] YYYY [Месяц:] MM');
Результат:
Год: 2026 Месяц: 05
Moment.js содержит специальные локализованные шаблоны.
| Токен | Значение |
|---|---|
L |
Короткая дата |
LL |
Полная дата |
LLL |
Дата и время |
LLLL |
Полная дата с днём недели |
Пример:
moment.locale('ru');
console.log(moment().format('LL'));
Результат:
21 мая 2026 г.
moment.locale('ru');
console.log(
moment().format('LLLL HH:mm')
);
Результат:
четверг, 21 мая 2026 г. 14:37
LLLL формирует локализованную дату, а HH:mm
добавляет точное время.
moment().format('HH:mm:ss');
Результат:
14:37:52
moment().format('hh:mm:ss A');
Результат:
02:37:52 PM
Токен A добавляет AM или
PM.
moment().format('HH:mm:ss.SSS');
Результат:
14:37:52.145
| Токен | Значение |
|---|---|
S |
Десятые |
SS |
Сотые |
SSS |
Миллисекунды |
moment().format('YYYY-MM-DDTHH:mm:ss');
Результат:
2026-05-21T14:37:52
Символ T здесь используется как обычный текст.
Более безопасный вариант:
moment().format('YYYY-MM-DD[T]HH:mm:ss');
| Токен | Значение |
|---|---|
Z |
Смещение timezone |
ZZ |
Смещение без двоеточия |
Пример:
moment().format('YYYY-MM-DD HH:mm:ss Z');
Результат:
2026-05-21 14:37:52 +06:00
moment.locale('ru');
console.log(
moment().format('dddd, DD MMMM YYYY')
);
Результат:
четверг, 21 мая 2026
Разбор:
| Токен | Значение |
|---|---|
dddd |
Полное название дня недели |
MMMM |
Полное название месяца |
moment().format('DD.MM.YY');
Результат:
21.05.26
moment().format('dddd, DD MMMM YYYY HH:mm:ss');
Результат:
четверг, 21 мая 2026 14:37:52
moment.locale('ru');
console.log(
moment().format(
'[Сегодня:] dddd, DD MMMM YYYY [в] HH:mm:ss'
)
);
Результат:
Сегодня: четверг, 21 мая 2026 в 14:37:52
Здесь одновременно используются:
Токены применяются не только в format(), но и в разборе
строк.
const date = moment(
'21-05-2026 14:30',
'DD-MM-YYYY HH:mm'
);
console.log(date.format());
Шаблон сообщает библиотеке, как интерпретировать входную строку.
Moment.js поддерживает массив шаблонов.
const date = moment(
'21/05/2026',
[
'DD-MM-YYYY',
'DD/MM/YYYY',
'YYYY-MM-DD'
]
);
Библиотека последовательно проверяет форматы.
| Токен | Пример |
|---|---|
Do |
1st, 2nd |
Mo |
1st month |
Пример:
moment.locale('en');
console.log(
moment().format('MMMM Do YYYY')
);
Результат:
May 21st 2026
moment.locale('ru');
console.log(
moment().format('ddd, D MMM YYYY')
);
Результат:
чт, 21 май 2026
| Токен | Значение |
|---|---|
ddd |
Краткий день недели |
MMM |
Краткое название месяца |
| Токен | Значение |
|---|---|
X |
Unix timestamp в секундах |
x |
Unix timestamp в миллисекундах |
moment().format('X');
Результат:
1779363472
Комбинация:
moment().format('YYYY-MM-DD X');
Формат может собираться программно.
const includeTime = true;
const format = includeTime
? 'DD.MM.YYYY HH:mm'
: 'DD.MM.YYYY';
console.log(
moment().format(format)
);
Подобный подход применяется в:
MM и
mmmoment().format('HH:MM');
Неверно:
MM — месяцПравильно:
moment().format('HH:mm');
DD и
dd| Токен | Значение |
|---|---|
DD |
День месяца |
dd |
Минимальное имя дня недели |
Пример:
moment().format('dd');
Результат:
чт
moment().format('Дата: DD.MM.YYYY');
Некоторые символы могут интерпретироваться как токены.
Безопасный вариант:
moment().format('[Дата:] DD.MM.YYYY');
moment().format(
'YYYY-MM-DD HH:mm:ss.SSS'
);
moment().format(
'YYYYMMDD'
);
moment().format(
'DD MMMM YYYY, HH:mm'
);
moment().format(
'YYYY-MM-DDTHH:mm:ssZ'
);
Один и тот же шаблон при разных локалях выдаёт разный результат.
moment.locale('ru');
console.log(
moment().format('dddd, MMMM')
);
Результат:
четверг, май
Английская локаль:
moment.locale('en');
console.log(
moment().format('dddd, MMMM')
);
Результат:
Thursday, May
Длинные комбинации рекомендуется структурировать.
Плохо:
moment().format('dddd,DDMMMMYYYYHH:mm:ssZ');
Хорошо:
moment().format(
'dddd, DD MMMM YYYY HH:mm:ss Z'
);
Если в проекте используется:
YYYY-MM-DD
то этот формат желательно применять везде для машинного представления дат.
Для API:
YYYY-MM-DDTHH:mm:ssZ
Для интерфейса:
DD.MM.YYYY HH:mm
Формат:
01/02/03
неочевиден.
Лучше:
2026-02-01
или:
01 Feb 2026
const date = moment()
.add(2, 'days')
.subtract(3, 'hours');
console.log(
date.format('DD.MM.YYYY HH:mm')
);
Комбинация методов модификации даты и сложных шаблонов форматирования активно используется в: