API Day.js построено вокруг минималистичной и предсказуемой модели работы с датами, где базовая сущность — неизменяемый объект-обёртка над значением времени. В отличие от традиционного подхода, где библиотека предоставляет широкий набор методов «из коробки», Day.js изначально поставляется с компактным ядром и расширяется через плагины.
Ключевая особенность архитектуры заключается в разделении функциональности на:
Такой подход формирует API, ориентированный на дерево зависимостей и оптимизацию сборки.
Одно из фундаментальных отличий API Day.js — строгая иммутабельность объектов.
Каждый вызов метода, изменяющего дату, не модифицирует исходный объект, а возвращает новый экземпляр.
Пример поведения концептуально выглядит так:
Это отличие критично по сравнению с подходами, где объект даты изменяется «на месте», так как:
Иммутабельная модель делает API более предсказуемым при сложных преобразованиях дат.
API создания дат в Day.js поддерживает несколько входных форматов, при этом сохраняет единообразную точку входа.
Основной конструктор принимает:
Date нативного JavaScript;В отличие от стандартного Date, поведение парсинга более
строгой и контролируемое, что снижает вероятность неявных
преобразований.
Особенность API заключается в том, что:
Также важной частью является концепция ленивого парсинга, при котором внутреннее представление вычисляется только при необходимости.
Форматирование в Day.js реализовано через метод format,
который опирается на строку-шаблон.
API использует систему токенов, аналогичную другим библиотекам работы с датами, однако отличается компактностью и отсутствием избыточных опций.
Основные особенности:
Форматирование не зависит от глобального состояния библиотеки, что снижает риски конфликтов в больших приложениях.
API доступа к компонентам даты реализовано через унифицированные методы:
Особенность подхода заключается в симметрии API: один и тот же метод используется как для чтения, так и для создания нового экземпляра с изменённым значением.
Поведение:
Это отличает Day.js от моделей, где геттеры и сеттеры разделены или где изменение происходит мутирующим образом.
Базовый Day.js не включает полноценную работу с временными зонами в ядре. Поддержка реализуется через плагины, такие как UTC и timezone.
API при этом остаётся единым:
utc() переключает объект в UTC-режим;tz() применяется через подключаемый плагин для работы с
конкретной зоной.Такое разделение приводит к важному архитектурному следствию:
Работа с зонами строится через цепочку преобразований, при этом сохраняется иммутабельность объектов.
Плагинная система Day.js — одно из наиболее значимых отличий API от альтернативных решений.
Плагины:
extend;Типовые расширения включают:
Архитектурная особенность заключается в том, что API становится динамически формируемым в зависимости от конфигурации проекта.
Это создаёт различие между:
Нативный Date в JavaScript предоставляет низкоуровневый
интерфейс, ориентированный на хранение и базовые операции. Его API
характеризуется:
Day.js предлагает более структурированную модель:
По сравнению с Moment.js API Day.js сохраняет схожую концепцию вызовов, но отличается:
Таким образом, API Day.js можно рассматривать как упрощённую и оптимизированную эволюцию более старых моделей.
Цепочечный стиль является встроенной частью API и поддерживается благодаря иммутабельности объектов.
Каждый метод возвращает новый экземпляр, что позволяет строить последовательности преобразований:
Цепочки формируют декларативный стиль описания операций над датами, где промежуточные состояния не требуют явного хранения.
Особенность API заключается в том, что цепочки не зависят от внешнего состояния и всегда вычисляются детерминированно.
API Day.js тесно связан с концепцией минимального размера библиотеки.
В отличие от монолитных решений, здесь:
Это влияет на саму структуру API:
В результате API воспринимается как набор базовых примитивов, вокруг которых формируется функциональность проекта.