Каждый экземпляр Day.js представляет собой обёртку над стандартным
объектом Date, дополненную слоем неизменяемой (immutable)
функциональности и набором методов для преобразования и форматирования
времени. Несмотря на внешнюю простоту API, структура результата имеет
несколько внутренних уровней, которые определяют поведение
библиотеки.
Основой любого экземпляра является объект с приватными полями, не предназначенными для прямого изменения, но доступными для понимания механики работы.
Ключевые внутренние компоненты:
Date, содержащий
фактическое значение времениen, ru)Именно $d является источником истины: все вычисления в
конечном счёте транслируются в методы стандартного
Date.
Экземпляр Day.js не является «плоским» объектом данных. При логировании или сериализации он ведёт себя специфическим образом.
При выводе в консоль отображается объект, содержащий внутренние поля,
однако при преобразовании в примитивы используется значение
$d.
Метод toString() возвращает строковое представление,
основанное на локали окружения:
Date.prototype.toString()Метод valueOf() возвращает числовое представление
времени:
Date.now() для конкретного экземпляраthis.$d.valueOf()Это поведение позволяет использовать Day.js в арифметике дат:
>, <Методы Day.js делятся на две большие категории по типу результата: методы, возвращающие новый экземпляр, и методы, возвращающие примитив.
Большинство операций модификации времени не изменяют текущий объект, а создают новый экземпляр с изменёнными внутренними полями.
Примеры:
add()subtract()set()startOf()endOf()locale()utc()Возвращаемый объект имеет ту же внутреннюю форму:
$d (новый Date)$L, $uПринцип неизменяемости означает:
Это формирует цепочечную модель:
Dayjs → Dayjs → Dayjs → ...
где каждый шаг — новый независимый объект.
Некоторые методы предназначены для извлечения конкретных данных из экземпляра.
year()month()date()hour()minute()second()Структура результата:
$dformat()toISOString()toJSON()Метод format() возвращает строку, построенную на основе
токенов:
string$LСтруктура результата зависит от шаблона:
YYYY — годMM — месяцDD — деньHH:mm:ss — времяПример структуры выхода:
"2026-05-23 14:30:00"
Метод toJSON() делегирует вызов
toISOString():
Пример структуры:
"2026-05-23T12:30:00.000Z"
При использовании JSON.stringify() объект Day.js
автоматически преобразуется через toJSON().
Таким образом, итоговая структура в JSON:
$d, $L,
$uПример:
"2026-05-23T12:30:00.000Z"
Важно, что внутренняя структура полностью скрывается, и Day.js ведёт себя как примитивный тип.
Метод clone() создаёт новый экземпляр с идентичным
состоянием.
Структурно копия содержит:
$d с тем же временемПри этом отсутствует разделение ссылок на изменяемые данные:
Каждый экземпляр содержит скрытую информацию о валидности даты.
Метод isValid() проверяет:
$dСтруктура результата метода:
true — дата корректнаfalse — дата невалиднаНикаких исключений или дополнительных структур не возвращается.
Day.js расширяется через плагины, которые модифицируют:
$x$xПоле $x служит контейнером:
Структура $x не стандартизирована:
При операциях add и subtract происходит
пересборка $d.
Механизм:
$dDateСтруктура результата всегда включает:
Экземпляры Day.js при сравнении не сравниваются как объекты:
dayjsA === dayjsB — сравнение ссылокdayjsA.valueOf() === dayjsB.valueOf() — сравнение
времениСтруктура результата valueOf() делает возможным
корректное сравнение через:
Структурно любой экземпляр Day.js можно представить как многослойный объект:
Date объектИменно сочетание этих слоёв формирует поведение всех возвращаемых значений библиотеки, где каждый метод либо извлекает данные из структуры, либо создаёт её новую версию без нарушения неизменяемости.