Day.js как прямая замена

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

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 практически без изменения бизнес-логики приложения.

Советы по миграции

  1. Импорт и расширение: подключение плагинов Day.js соответствует функциональности Moment.js (например, timezone, localizedFormat, duration).
  2. Методы работы с датами: add, subtract, diff, isBefore, isAfter, isSame работают с одинаковой сигнатурой.
  3. Форматирование и локализация: форматирование через format() и локали через locale() полностью совместимы.
  4. Непосредственная замена: большинство вызовов moment() заменяется на dayjs(), что минимизирует рефакторинг.

Эта совместимость позволяет постепенно переходить на более компактную и современную библиотеку, сохраняя привычный синтаксис и богатую функциональность.