Библиотека Day.js оперирует строго фиксированным набором строковых
идентификаторов, которые определяют единицы измерения времени. Эти
единицы используются в методах add, subtract,
diff, startOf, endOf и других
API, связанных с преобразованием дат.
Ключевая особенность системы единиц — строгость написания: строки чувствительны к регистру и не допускают вариативных форм.
Основные календарные единицы:
year — годmonth — месяцweek — неделяday — деньЭти единицы оперируют крупными временными интервалами и используются для работы с календарными вычислениями.
Пример:
dayjs().add(1, 'year');
dayjs().subtract(2, 'month');
dayjs().diff(otherDate, 'day');
Для более точного управления временем используются промежуточные единицы:
hour — часminute — минутаsecond — секундаmillisecond — миллисекундаЭти единицы обеспечивают высокую точность при вычислениях и часто применяются в таймерах, логировании и измерении интервалов.
Пример использования:
dayjs().add(3, 'hour');
dayjs().subtract(15, 'minute');
dayjs().diff(otherDate, 'second');
Особенность работы с малыми единицами заключается в том, что они имеют фиксированную длительность:
Единица week относится к календарным интервалам и
зависит от конфигурации локали. Неделя может начинаться с понедельника
или воскресенья в зависимости от локализации.
dayjs().add(1, 'week');
dayjs().startOf('week');
При этом неделя не всегда равна строго 7 * 24 часа в вычислительном смысле, так как привязана к календарным границам.
Единицы month и year являются календарными
и не имеют фиксированной длительности в миллисекундах.
Особенности:
Пример:
dayjs('2024-01-31').add(1, 'month'); // поведение зависит от нормализации даты
Day.js автоматически корректирует переполнение дат, «сдвигая» результат к последнему допустимому дню месяца при необходимости.
Единица quarter представляет собой квартал года (3
месяца).
Используется для финансовых и аналитических расчётов:
dayjs().add(1, 'quarter');
dayjs().startOf('quarter');
Кварталы:
Методы изменения времени принимают число и единицу измерения:
dayjs().add(10, 'day');
dayjs().subtract(5, 'minute');
Поведение зависит от типа единицы:
Метод вычисления разницы между датами:
dayjs(dateA).diff(dateB, 'hour');
Результат зависит от выбранной единицы:
millisecond возвращается точное значениеday или month результат
округляетсяМетоды обрезки даты до начала или конца интервала:
dayjs().startOf('month');
dayjs().endOf('day');
Поддерживаемые единицы определяют уровень точности:
year → начало/конец годаmonth → начало/конец месяцаweek → начало/конец неделиday → границы сутокhour, minute, second,
millisecond → соответствующие уровни времениDay.js принимает только строго определённые строки. Недопустимые варианты:
days ❌Day ❌DAY ❌mins ❌Корректные формы:
dayminutemonthЭто правило критично для стабильной работы API, так как библиотека не выполняет автоматическую нормализацию множественных форм.
Календарные единицы (year, month,
week) не преобразуются напрямую в фиксированное количество
миллисекунд. Это приводит к важным последствиям:
adddiff могут быть округленыПример:
dayjs('2024-01-31').add(1, 'month');
Результат зависит от внутренней логики нормализации, а не от простого прибавления 30 дней.
Мелкие единицы (hour, minute,
second, millisecond) всегда имеют
фиксированную длительность. Это делает их предсказуемыми в любых
вычислениях:
dayjs().add(3600, 'second');
Такие операции эквивалентны миллисекундным преобразованиям и не зависят от календаря.
Все основные методы Day.js используют единый набор идентификаторов:
add(value, unit)subtract(value, unit)diff(date, unit)startOf(unit)endOf(unit)Одинаковый словарь единиц обеспечивает предсказуемость и снижает вероятность ошибок при переключении между методами.
При использовании diff и некоторых операций нормализации
происходит округление:
floor для календарных единицПример:
dayjs('2024-01-01').diff('2023-01-01', 'month');
Результат будет основан на полных календарных месяцах, а не на средней длине месяца в днях.
Все поддерживаемые единицы можно условно разделить на три категории:
Календарные:
Суточные:
Точные временные:
Каждая группа определяет способ интерпретации операций и влияет на результат вычислений внутри API библиотеки.