Таблица соответствия методов

Day.js предоставляет компактный API, во многом повторяющий подход Moment.js, но с упрощённой архитектурой и неизменяемыми объектами. Основная идея сопоставления заключается в том, что каждый метод Moment.js имеет либо прямой аналог в Day.js, либо реализуется через плагины.

Операция Moment.js Day.js Особенности
Создание текущей даты moment() dayjs() Без параметров возвращает текущий момент времени
Парсинг строки moment(string) dayjs(string) Использует встроенный парсер или Date.parse
Парсинг с форматом moment(str, fmt) dayjs(str, fmt) + customParseFormat Требует плагина
Клонирование moment(obj) dayjs(obj) Создаёт новый неизменяемый объект
Из Unix timestamp moment.unix(ts) dayjs.unix(ts) Секунды, не миллисекунды
Из миллисекунд moment(ms) dayjs(ms) Прямое соответствие

Соответствие методов получения компонентов даты

Day.js использует унифицированный набор геттеров, совпадающий по смыслу с Moment.js, но с более строгой семантикой.

Компонент Moment.js Day.js
Год moment().year() dayjs().year()
Месяц moment().month() dayjs().month()
День месяца moment().date() dayjs().date()
Часы moment().hour() dayjs().hour()
Минуты moment().minute() dayjs().minute()
Секунды moment().second() dayjs().second()
Миллисекунды moment().millisecond() dayjs().millisecond()

Особенность Day.js заключается в неизменяемости: вызов сеттера возвращает новый объект.

const d = dayjs();
const updated = d.year(2025);

Соответствие методов изменения даты

Манипуляции с датой реализованы через единый метод add и subtract, что соответствует цепочечной модели API.

Операция Moment.js Day.js
Добавить время moment().add(1, 'day') dayjs().add(1, 'day')
Вычесть время moment().subtract(1, 'day') dayjs().subtract(1, 'day')

Поддерживаемые единицы времени совпадают: year, month, week, day, hour, minute, second, millisecond.

dayjs().add(2, 'month').subtract(3, 'day');

Соответствие методов форматирования

Форматирование в Day.js реализовано через метод format, совместимый с Moment.js.

Операция Moment.js Day.js
Форматирование строки moment().format('YYYY-MM-DD') dayjs().format('YYYY-MM-DD')

Поддерживаются стандартные токены:

Токен Значение
YYYY Год
MM Месяц
DD День
HH Часы (24h)
mm Минуты
ss Секунды

Соответствие методов сравнения

Сравнение дат реализовано через набор методов с одинаковой семантикой.

Операция Moment.js Day.js
Равно moment(a).isSame(b) dayjs(a).isSame(b)
До moment(a).isBefore(b) dayjs(a).isBefore(b)
После moment(a).isAfter(b) dayjs(a).isAfter(b)
Между moment(a).isBetween(x, y) dayjs(a).isBetween(x, y) + isBetween plugin

Пример:

dayjs('2025-01-01').isBefore('2026-01-01');

Соответствие методов начала и конца периода

Работа с границами времени требует подключения плагина advancedFormat и базовых методов startOf / endOf.

Операция Moment.js Day.js
Начало периода moment().startOf('month') dayjs().startOf('month')
Конец периода moment().endOf('month') dayjs().endOf('month')

Поддерживаемые единицы идентичны:

dayjs().startOf('week');
dayjs().endOf('day');

Соответствие методов Unix и timestamp

Операция Moment.js Day.js
Unix (секунды) moment().unix() dayjs().unix()
Timestamp (мс) moment().valueOf() dayjs().valueOf()
Преобразование в Date moment().toDate() dayjs().toDate()
const ts = dayjs().valueOf();
const date = dayjs().toDate();

Соответствие методов проверки валидности

Операция Moment.js Day.js
Проверка даты moment().isValid() dayjs().isValid()

Day.js использует встроенный механизм валидации на основе результата парсинга.

dayjs('invalid-date').isValid(); // false

Соответствие методов локализации

Локализация в Day.js реализуется через плагины locale и localizedFormat.

Операция Moment.js Day.js
Установка локали moment.locale('ru') dayjs.locale('ru')
Получение локали moment.locale() dayjs.locale()
import 'dayjs/locale/ru';

dayjs.locale('ru');

Соответствие методов длительности и интервалов

Moment.js использует отдельный объект duration, тогда как Day.js реализует аналог через плагин duration.

Операция Moment.js Day.js
Создание длительности moment.duration(2, 'hours') dayjs.duration(2, 'hours')
Добавление длительности moment().add(duration) dayjs().add(duration)
import duration from 'dayjs/plugin/duration';
dayjs.extend(duration);

const d = dayjs.duration(5, 'day');

Соответствие методов клонирования и иммутабельности

Операция Moment.js Day.js
Клон moment().clone() dayjs() или dayjs(existing)

Day.js не изменяет исходный объект, поэтому явный clone обычно не требуется.

const a = dayjs();
const b = a.add(1, 'day'); // a не изменяется

Соответствие методов извлечения диапазонов времени

Операция Moment.js Day.js
Неделя года moment().week() weekOfYear plugin
День года moment().dayOfYear() dayOfYear plugin
import weekOfYear from 'dayjs/plugin/weekOfYear';
dayjs.extend(weekOfYear);

dayjs().week();

Сопоставление цепочек вызовов

Общая модель API сохраняет идентичную структуру:

// Moment.js
moment()
  .add(1, 'year')
  .subtract(2, 'days')
  .format('YYYY-MM-DD');

// Day.js
dayjs()
  .add(1, 'year')
  .subtract(2, 'days')
  .format('YYYY-MM-DD');

Сопоставление через плагины

Day.js реализует расширяемость через плагины вместо встроенных модулей Moment.js.

Возможность Moment.js Day.js
Парсинг форматов встроен customParseFormat
Относительное время встроен relativeTime
Работа с диапазонами встроен isBetween
Длительности встроен duration
import relativeTime from 'dayjs/plugin/relativeTime';
dayjs.extend(relativeTime);

dayjs().fromNow();