Библиотека Moment.js предоставляет мощные инструменты для работы с
датами и временем, включая гибкое форматирование. Форматирование
позволяет преобразовать объект moment в строку, удобную для
отображения пользователю, хранения или передачи между системами.
Ключевым методом для этих целей является .format().
const moment = require('moment');
let now = moment();
console.log(now.format()); // По умолчанию ISO 8601
Метод .format() принимает строку-шаблон, содержащую
специальные символы для отображения компонентов даты и времени.
Moment.js использует систему токенов, где каждый символ или комбинация символов обозначает конкретную часть даты:
Год
YYYY — полный год (например, 2026)YY — две последние цифры года (например, 26)Месяц
M — месяц без ведущего нуля (1–12)MM — месяц с ведущим нулем (01–12)MMM — сокращённое название месяца (Jan, Feb)MMMM — полное название месяца (January, February)День месяца
D — день без ведущего нуля (1–31)DD — день с ведущим нулем (01–31)День недели
d — день недели (0–6, 0 — воскресенье)dd — сокращённое название дня недели (Su, Mo)ddd — сокращённое слово (Sun, Mon)dddd — полное название дня (Sunday, Monday)Часы
H — 24-часовой формат без ведущего нуля (0–23)HH — 24-часовой формат с ведущим нулем (00–23)h — 12-часовой формат без ведущего нуля (1–12)hh — 12-часовой формат с ведущим нулем (01–12)Минуты и секунды
m / mm — минутыs / ss — секундыAM/PM
A — AM или PMa — am или pmЧасти времени и миллисекунды
SSS — миллисекунды (000–999)Z — смещение временной зоны (+05:00)ZZ — смещение временной зоны без двоеточия (+0500)Пример использования токенов:
let date = moment('2026-05-21T14:30:45');
console.log(date.format('YYYY/MM/DD HH:mm:ss')); // 2026/05/21 14:30:45
console.log(date.format('dddd, MMMM D, YYYY h:mm A')); // Thursday, May 21, 2026 2:30 PM
Moment.js поддерживает интернационализацию, что позволяет выводить
дату в формате, соответствующем выбранной локали. Локаль задаётся через
метод .locale():
moment.locale('ru'); // Устанавливаем русскую локаль
let date = moment('2026-05-21');
console.log(date.format('LLLL')); // четверг, 21 мая 2026 г., 00:00
С помощью локализации можно автоматически получать названия месяцев и дней недели на нужном языке, а также корректное отображение AM/PM, если это применимо.
Помимо ручного задания шаблонов, Moment.js предлагает предопределённые форматы для стандартных случаев:
LT — часы и минуты (2:30 PM)LTS — часы, минуты, секунды (2:30:45 PM)L — короткая дата (05/21/2026)LL — длинная дата (May 21, 2026)LLL — длинная дата с временем (May 21, 2026 2:30
PM)LLLL — полный формат с днём недели (Thursday, May 21,
2026 2:30 PM)Предопределённые форматы автоматически адаптируются под локаль:
moment.locale('ru');
console.log(moment().format('LL')); // 21 мая 2026 г.
console.log(moment().format('LLLL')); // четверг, 21 мая 2026 г., 14:30
В шаблонах форматирования можно использовать литералы, заключая их в
квадратные скобки [], чтобы они не воспринимались как
токены:
let date = moment('2026-05-21');
console.log(date.format('[Сегодня] DD [число месяца]')); // Сегодня 21 число месяца
Это полезно для включения текста или символов, не связанных с датой.
Для точного форматирования времени можно комбинировать 24-часовой и 12-часовой форматы, добавлять ведущие нули или отображать миллисекунды:
let time = moment('14:05:09.123', 'HH:mm:ss.SSS');
console.log(time.format('HH:mm:ss.SSS')); // 14:05:09.123
console.log(time.format('h:mm:ss A')); // 2:05:09 PM
Это позволяет создавать универсальные строки времени для логов, интерфейсов и файловых форматов.
Moment.js поддерживает выравнивание чисел с помощью ведущих нулей
(DD, MM, HH, mm,
ss) для удобного отображения и сортировки строк:
let day = moment('2026-05-07');
console.log(day.format('DD/MM/YYYY')); // 07/05/2026
Без ведущего нуля (D, M) вывод был бы:
7/5/2026.
Можно создавать сложные форматы, комбинируя токены для различных компонентов даты и времени, а также литералы:
let date = moment('2026-05-21T14:30');
console.log(date.format('dddd, D MMMM YYYY [в] HH:mm')); // четверг, 21 мая 2026 в 14:30
Это позволяет гибко формировать строки для интерфейсов, отчетов и уведомлений.
.format() с явным шаблоном для
единообразия.YYYY-MM-DDTHH:mm:ssZ.Правильное форматирование дат и времени обеспечивает читаемость, консистентность и поддержку международных стандартов.