Библиотека Day.js предоставляет компактную и предсказуемую
альтернативу стандартному объекту Date, сохраняя при этом
знакомую модель работы через цепочки вызовов и иммутабельность. Основная
концепция заключается в том, что большинство методов Date
имеют прямые или логически эквивалентные аналоги, сгруппированные по
категориям: получение значений, установка значений, работа с временными
метками и строковыми представлениями.
В стандартном Date доступ к компонентам осуществляется
через методы вида getFullYear(), getMonth() и
так далее. В Day.js используется единый метод get через
специализированные функции доступа.
| JavaScript Date | Day.js |
|---|---|
date.getFullYear() |
dayjs().year() |
date.getMonth() |
dayjs().month() |
date.getDate() |
dayjs().date() |
Особенность:
month() в Day.js возвращает значение в диапазоне
0–11, аналогично Date.getMonth()date() соответствует дню месяца (1–31)const d = dayjs('2026-05-23');
d.year(); // 2026
d.month(); // 4 (май, так как отсчёт с 0)
d.date(); // 23
| JavaScript Date | Day.js |
|---|---|
getHours() |
hour() |
getMinutes() |
minute() |
getSeconds() |
second() |
getMilliseconds() |
millisecond() |
const d = dayjs('2026-05-23T14:45:30.250');
d.hour(); // 14
d.minute(); // 45
d.second(); // 30
d.millisecond(); // 250
| JavaScript Date | Day.js |
|---|---|
getDay() |
day() |
const d = dayjs('2026-05-23');
d.day(); // 6 (суббота)
Значения совпадают со стандартом ECMAScript:
В Date методы изменения состояния являются мутирующими
(setFullYear, setMonth и т.д.). Day.js,
напротив, возвращает новый объект, не изменяя исходный.
| JavaScript Date | Day.js |
|---|---|
setFullYear(y) |
year(y) |
setMonth(m) |
month(m) |
setDate(d) |
date(d) |
const d = dayjs('2026-05-23');
const updated = d.year(2030);
updated.year(); // 2030
d.year(); // 2026 (оригинал не изменился)
| JavaScript Date | Day.js |
|---|---|
setHours(h) |
hour(h) |
setMinutes(m) |
minute(m) |
setSeconds(s) |
second(s) |
setMilliseconds(ms) |
millisecond(ms) |
const d = dayjs('2026-05-23T10:00:00');
const updated = d.hour(18).minute(30);
updated.format(); // 2026-05-23T18:30:00+...
В стандартном Date нет прямого setter для дня недели. В
Day.js аналогичная логика реализуется через метод
day():
dayjs().day(1); // установить понедельник текущей недели
Если указанное значение меньше текущего дня недели, происходит переход на следующую или предыдущую неделю в зависимости от разницы.
| JavaScript Date | Day.js |
|---|---|
date.getTime() |
valueOf() |
Date.now() |
dayjs().valueOf() |
const d = dayjs('2026-05-23T00:00:00');
d.valueOf(); // миллисекунды с 1970-01-01
Также доступна форма:
d.unix(); // секунды с эпохи UNIX
| JavaScript Date | Day.js |
|---|---|
new Date(ms) |
dayjs(ms) |
const jsDate = new Date(1716422400000);
const d = dayjs(1716422400000);
| JavaScript Date | Day.js |
|---|---|
toISOString() |
toISOString() |
toString() |
toString() |
const d = dayjs('2026-05-23T12:00:00Z');
d.toISOString();
d.toString();
toLocaleStringВ Date используется:
toLocaleDateString()toLocaleTimeString()toLocaleString()В Day.js основной механизм — format():
const d = dayjs('2026-05-23T14:30:00');
d.format('YYYY-MM-DD'); // дата
d.format('HH:mm:ss'); // время
d.format('YYYY-MM-DD HH:mm'); // комбинированный формат
Фактически format() объединяет все локализационные
методы Date в одну систему шаблонов.
Хотя в Date часто используют операции сравнения через
getTime(), Day.js предоставляет методы высокого уровня.
| JavaScript Date | Day.js |
|---|---|
a.getTime() === b.getTime() |
a.isSame(b) |
a > b |
a.isAfter(b) |
a < b |
a.isBefore(b) |
const a = dayjs('2026-01-01');
const b = dayjs('2026-12-31');
a.isBefore(b); // true
a.isAfter(b); // false
a.isSame(b); // false
В Date отсутствует удобный способ массового изменения
нескольких полей без цепочки set.... Day.js сохраняет
неизменяемую модель и позволяет строить новые состояния
последовательно:
const d = dayjs('2026-05-23');
const updated = d
.year(2030)
.month(0)
.date(1)
.hour(0)
.minute(0)
.second(0);
Такой подход заменяет множественные вызовы:
const jsDate = new Date();
jsDate.setFullYear(2030);
jsDate.setMonth(0);
jsDate.setDate(1);
Несмотря на схожесть, поведение Day.js сохраняет ряд особенностей ECMAScript:
0 = январь)0)Эти свойства делают эквивалентность с Date формальной,
но не механической: логика совпадает, но модель использования
отличается.
В Date и Day.js применяется автоматическая нормализация
значений:
dayjs().month(12); // переход на следующий год
dayjs().date(32); // переход в следующий месяц
Это эквивалентно поведению:
const d = new Date();
d.setMonth(12);
Однако Day.js сохраняет цепочный стиль и предсказуемость результата без изменения исходного объекта.
Некоторые методы Date не имеют прямых аналогов в базовом
Day.js и требуют подключаемых расширений:
Это расширяет модель эквивалентности, но не нарушает базовую
совместимость с Date, так как ядро Day.js покрывает
основные операции работы с временем и датой.