Moment.js является одной из наиболее популярных библиотек для работы с датами и временем в JavaScript. Она обеспечивает удобное создание, парсинг, форматирование и манипуляцию датами, что особенно важно при отображении информации в пользовательских интерфейсах. Библиотека позволяет унифицировать работу с датами вне зависимости от браузера и локали пользователя.
Объекты Moment.js создаются с помощью функции moment().
Существует несколько способов инициализации:
// Текущая дата и время
const now = moment();
// С указанием конкретной даты
const specificDate = moment("2026-05-22");
// С указанием даты и времени в формате ISO
const isoDate = moment("2026-05-22T14:30:00");
// С массивом [год, месяц, день, часы, минуты, секунды]
const arrayDate = moment([2026, 4, 22, 14, 30, 0]); // Месяцы считаются с 0
Важно: месяцы в массиве считаются от 0 до 11, что является распространённым источником ошибок.
Форматирование является ключевым при выводе дат в интерфейсе.
Moment.js использует метод format(), который принимает
строку шаблона:
const date = moment("2026-05-22T14:30:00");
// Форматирование даты
date.format("YYYY-MM-DD"); // "2026-05-22"
date.format("DD/MM/YYYY"); // "22/05/2026"
date.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Friday, May 22nd 2026, 2:30:00 pm"
Основные шаблоны:
YYYY — год в 4 цифрыMM — месяц с ведущим нулемDD — день месяца с ведущим нулемdddd — название дня неделиMMMM — полное название месяцаDo — день месяца с суффиксом (1st,
2nd)h, hh — часы в 12-часовом форматеH, HH — часы в 24-часовом форматеmm — минутыss — секундыa — am/pmДля отображения дат на разных языках Moment.js поддерживает локали.
Локаль можно установить через moment.locale():
moment.locale('ru'); // Установка русской локали
const date = moment();
date.format('LLLL'); // "пятница, 22 мая 2026 г., 14:30"
При локализации автоматически меняется формат даты, названия дней недели и месяцев, а также суффиксы чисел.
Для интерфейсов с пользователями из разных стран важна поддержка временных зон. Moment.js совместно с Moment Timezone позволяет конвертировать время:
const date = moment.tz("2026-05-22 14:30", "Europe/Moscow");
date.format('YYYY-MM-DD HH:mm z'); // "2026-05-22 14:30 MSK"
const nyTime = date.clone().tz("America/New_York");
nyTime.format('YYYY-MM-DD HH:mm z'); // "2026-05-22 07:30 EDT"
Использование .clone() предотвращает изменение исходного
объекта даты.
Moment.js предоставляет методы для добавления и вычитания времени:
const date = moment("2026-05-22");
// Добавление дней, месяцев, лет
date.add(7, 'days'); // 2026-05-29
date.add(1, 'months'); // 2026-06-29
date.add(2, 'years'); // 2028-06-29
// Вычитание
date.subtract(3, 'days'); // 2028-06-26
Допустимые единицы измерения: years,
months, weeks, days,
hours, minutes, seconds.
Для отображения информации в интерфейсе часто требуется проверка порядка дат:
const start = moment("2026-05-22");
const end = moment("2026-06-01");
start.isBefore(end); // true
start.isAfter(end); // false
start.isSame("2026-05-22", 'day'); // true
Метод isSame может принимать вторым аргументом единицу
измерения (year, month, day,
hour и т.д.), что позволяет сравнивать даты с нужной
точностью.
Moment.js позволяет легко выводить дату в виде “относительного времени”, что полезно для новостных лент и уведомлений:
const now = moment();
const past = moment("2026-05-20");
past.fromNow(); // "2 дня назад"
now.to(past); // "через 2 дня"
Методы fromNow() и to() автоматически
подбирают правильные формы и единицы времени.
Иногда данные приходят в нестандартных форматах. Moment.js позволяет задать собственный шаблон при создании даты:
const date = moment("22-05-2026 14:30", "DD-MM-YYYY HH:mm");
date.format("YYYY/MM/DD HH:mm"); // "2026/05/22 14:30"
Это важно при интеграции с серверными API, которые могут использовать различные форматы.
При разработке интерфейсов Moment.js помогает:
Moment.js обеспечивает комплексное решение для работы с датами,
исключая большинство проблем с нативным объектом Date,
включая парсинг, локализацию и манипуляции.