API библиотеки строится вокруг нескольких ключевых сущностей:
DateTime, Duration, Interval и
глобальных настроек через Settings. Каждая из них
представляет строго ограниченную область ответственности, что формирует
предсказуемую модель работы с датой и временем.
Основной принцип — неизменяемость объектов. Любая операция возвращает новый экземпляр, не модифицируя исходный. Это исключает скрытые побочные эффекты и упрощает построение цепочек преобразований.
DateTime — основной объект, через который выполняется
большинство операций.
Создание экземпляров происходит через статические методы:
DateTime.now() — текущее локальное времяDateTime.local() — локальная дата с явными
компонентамиDateTime.utc() — создание в UTCDateTime.fromISO() — разбор ISO-строкиDateTime.fromJSDate() — конвертация из
DateКаждый метод возвращает полноценный объект DateTime,
содержащий:
Таймзона является частью состояния DateTime и может быть
изменена через метод:
setZone(zone: string, { keepLocalTime?: boolean })При этом создаётся новый объект с пересчитанным временем.
Пример логики API:
keepLocalTime: true сохраняются компоненты времени,
изменяется только интерпретация зоныТакже используется:
toUTC() — перевод в UTCtoLocal() — перевод в локальную зону выполненияAPI опирается на IANA time zone database, что позволяет работать с
зонами вида Europe/Moscow, Asia/Almaty.
Библиотека поддерживает несколько форматов входных данных.
Наиболее строгий и предпочтительный:
DateTime.fromISO("2026-05-23T10:30:00")
Поддерживается полный спектр расширений ISO 8601: смещения, миллисекунды, зоны.
DateTime.fromMillis(1716450000000)
DateTime.fromSeconds(1716450000)
API различает миллисекунды и секунды, что важно при интеграции с внешними сервисами.
DateTime.fromJSDate(new Date())
Конвертация происходит без потери точности, но с привязкой к системной зоне.
DateTime.fromFormat("23-05-2026", "dd-MM-yyyy")
Парсинг зависит от токенизированного формата, где каждый элемент строки сопоставляется с шаблоном.
Форматирование реализуется через метод:
toFormat(formatString)Пример работы API:
yyyy — годMM — месяцdd — деньHH:mm — времяdt.toFormat("dd.MM.yyyy HH:mm")
Также поддерживаются специализированные форматы:
toISO() — ISO 8601 строкаtoRFC2822() — формат email/HTTPtoHTTP() — HTTP-date форматdt.toJSDate()
Возвращает стандартный Date, сохраняя момент
времени.
dt.toMillis()
Возвращает Unix-время в миллисекундах.
dt.toSeconds()
Используется в API, связанных с серверными таймстемпами и протоколами.
Любые методы изменения возвращают новый объект:
set({ year, month, day })plus({ days, hours })minus({ weeks })Пример:
const upd ated = dt.plus({ days: 5 })
Исходный объект остаётся неизменным.
Такой подход позволяет безопасно использовать цепочки:
dt.plus({ days: 1 }).se t({ hour: 10 }).toISO()
Duration представляет абстрактную длительность.
Создание:
Duration.fromObject({ hours: 2, minutes: 30 })
API поддерживает:
DateTimeПример:
dt.plus(Duration.fromObject({ days: 1 }))
Форматы вывода:
toISO() — ISO 8601 durationtoHuman() — человекочитаемое представлениеtoObject() — объектное представлениеInterval представляет промежуток между двумя
DateTime.
Создание:
Interval.fromDateTimes(start, end)
Основные методы API:
contains(dateTime) — проверка принадлежностиoverlaps(otherInterval) — пересечение интерваловlength() — длительностьИнтервал всегда строго нормализуется по времени начала и конца.
Settings управляет поведением библиотеки:
defaultZone — зона по умолчаниюdefaultLocale — локальnow() — переопределение текущего времени
(тестирование)Пример:
Settings.defaultLocale = "ru"
Settings.defaultZone = "Asia/Almaty"
Эти параметры влияют на все создаваемые экземпляры, если явно не указано иное.
Локаль влияет на:
dt.setLocale("ru").toLocaleString()
Метод toLocaleString использует внутренние пресеты:
DATE_SHORTDATE_MEDDATETIME_FULLДля передачи данных через API используется:
toJSON() — ISO строкаtoObject() — структурированный форматПример:
JSON.stringify(dt)
При десериализации необходимо использовать fromISO или
аналогичный метод.
Работа с веб-протоколами требует строгих форматов:
toHTTP()Last-Modified, DateПример использования:
const headerDate = DateTime.now().toHTTP()
ISO формат применяется в REST API:
dt.toISO()
Внутренне время представлено как:
API обеспечивает синхронизацию этих представлений при каждой операции.
При изменении одного параметра автоматически пересчитываются остальные, что исключает рассогласование состояния.
Типичный сценарий работы строится через цепочки:
DateTime.now()
.setZone("Europe/Moscow")
.plus({ days: 3 })
.set({ hour: 12 })
.toISO()
Каждый шаг создаёт новый объект, формируя предсказуемый конвейер преобразований данных.
Ошибочные состояния не выбрасывают исключения напрямую в большинстве случаев.
Вместо этого объект DateTime содержит флаг:
isValidи причину:
invalidReasonЭто позволяет безопасно обрабатывать результат без try/catch в простых сценариях.
API проектировался с учётом встроенных механизмов:
Intl.DateTimeFormatDateNumber (timestamps)Это позволяет интегрировать библиотеку в существующие приложения без адаптеров, используя минимальные преобразования типов.