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');
| Операция | 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();