Moment.js — это библиотека для работы с датами и временем в
JavaScript, предоставляющая удобный и интуитивно понятный интерфейс для
парсинга, форматирования, сравнения и манипуляций с датами. Основной
объект библиотеки создается вызовом функции moment().
const now = moment(); // текущая дата и время
Объект moment содержит методы для форматирования,
добавления или вычитания времени и сравнения дат. Например, для
форматирования даты используется метод format():
const formatted = moment().format('YYYY-MM-DD HH:mm:ss');
С помощью строк форматирования можно управлять отображением года, месяца, дня, часа, минут и секунд, а также работать с локалями.
Moment.js поддерживает парсинг строковых представлений дат в различных форматах:
const date = moment('2026-05-22', 'YYYY-MM-DD');
Метод isValid() позволяет проверять корректность
созданного объекта даты:
if (!date.isValid()) {
console.log('Некорректная дата');
}
Для автоматического распознавания даты Moment.js также может использовать стандартные форматы ISO 8601.
Добавление и вычитание времени реализуется через методы
add() и subtract():
const nextWeek = moment().add(7, 'days');
const lastMonth = moment().subtract(1, 'months');
Поддерживаются различные единицы измерения: годы, месяцы, дни, часы,
минуты, секунды и миллисекунды. Эти методы возвращают новый объект
moment, сохраняя неизменность исходного объекта, если не
используется мутация.
Moment.js предоставляет методы для сравнения дат:
isBefore(), isAfter(),
isSame():
const date1 = moment('2026-05-22');
const date2 = moment('2026-06-01');
console.log(date1.isBefore(date2)); // true
console.log(date1.isSame(date2, 'day')); // false
Для вычисления разницы используется метод diff(),
который позволяет определить количество единиц между двумя датами:
const diffDays = date2.diff(date1, 'days'); // 10
Moment.js расширяется библиотекой moment-timezone для
работы с часовыми поясами. Для преобразования времени используется метод
tz():
const nyTime = moment.tz('2026-05-22 12:00', 'America/New_York');
Поддерживается конвертация между часовыми поясами и автоматическая корректировка при переходе на летнее или зимнее время.
Библиотека позволяет выводить даты на разных языках через метод
locale():
moment.locale('ru');
console.log(moment().format('LLLL')); // Пятница, 22 мая 2026 г., 14:30
Локали управляют форматом отображения даты, названиями месяцев, дней недели и порядком элементов.
Day.js — это легковесная альтернатива Moment.js, совместимая по API.
Основные методы, такие как format(), add(),
subtract(), isBefore(),
isAfter(), diff() имеют аналогичное поведение.
Отличия заключаются в меньшем размере библиотеки и отсутствии встроенной
поддержки некоторых устаревших функций Moment.js. Для работы с
временными зонами и локалями Day.js предлагает плагины, которые
подключаются по мере необходимости:
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
const now = dayjs();
const nyTime = now.tz('America/New_York');
Day.js полностью поддерживает цепочку методов, сохраняя неизменность объектов, что делает миграцию с Moment.js простой и минимально затратной с точки зрения кода. Форматы строк, единицы измерения времени и методы сравнения дат идентичны, что позволяет заменить Moment.js на Day.js практически без изменения бизнес-логики приложения.
timezone, localizedFormat,
duration).add,
subtract, diff, isBefore,
isAfter, isSame работают с одинаковой
сигнатурой.format() и локали через locale() полностью
совместимы.moment() заменяется на dayjs(), что
минимизирует рефакторинг.Эта совместимость позволяет постепенно переходить на более компактную и современную библиотеку, сохраняя привычный синтаксис и богатую функциональность.