В библиотеке Day.js работа со временем основана на стандартизированном наборе единиц измерения, которые применяются во всех ключевых методах: добавлении, вычитании, вычислении разницы и округлении дат. Единицы определяют масштаб изменений и интерпретацию числовых значений при манипуляциях с объектами времени.
Базовый набор единиц включает:
year — годmonth — месяцweek — неделяday — деньhour — часminute — минутаsecond — секундаmillisecond — миллисекундаКаждая единица имеет строковый идентификатор, используемый в API.
Допускаются как формы в единственном числе, так и во множественном
(years, months, days и т.д.),
однако внутренняя интерпретация унифицирована.
Day.js использует строковые ключи для обозначения единиц времени. Эти ключи передаются в методы, определяющие арифметику дат.
Пример использования:
dayjs().add(1, 'day')
dayjs().subtract(2, 'months')
dayjs().add(3, 'year')
Строки интерпретируются без учёта регистра, однако стандартной практикой считается использование lowercase.
Допустимые алиасы:
y → yearM → monthw → weekd → dayh → hourm → minutes → secondms → millisecondКороткие формы применяются реже, поскольку снижают читаемость кода.
Методы add и subtract формируют основу
работы с единицами измерения времени. Оба метода принимают числовое
значение и единицу измерения.
dayjs().add(10, 'minute')
dayjs().subtract(5, 'day')
При добавлении месяцев и лет используется календарная логика, а не фиксированное количество дней.
Например:
Пример:
dayjs('2024-01-31').add(1, 'month') // 2024-02-29
Для единиц меньше дня (час, минута, секунда, миллисекунда) используется линейная модель времени, основанная на фиксированных интервалах.
Метод diff позволяет вычислять разницу между двумя
датами в заданных единицах.
dayjs('2024-01-01').diff('2023-01-01', 'year')
dayjs('2024-01-10').diff('2024-01-01', 'day')
Сигнатура:
dayjs().diff(date, unit, float)
unit определяет масштаб результатаfloat (boolean) включает дробные значенияПример с дробным результатом:
dayjs('2024-01-10').diff('2024-01-01', 'day', true) // 9.0
Особенность: при отсутствии указания единицы результат возвращается в миллисекундах.
dayjs().diff('2024-01-01') // миллисекунды
Методы startOf и endOf позволяют приводить
дату к началу или концу выбранной единицы измерения.
dayjs().startOf('day')
dayjs().endOf('month')
year — начало/конец года (1 января 00:00:00 / 31
декабря 23:59:59.999)month — первый/последний день месяцаweek — зависит от локали (начало недели может быть
понедельник или воскресенье)day — 00:00:00 / 23:59:59.999hour, minute, second —
обнуление младших единицПример:
dayjs('2024-05-23 15:45:12').startOf('hour')
// 2024-05-23 15:00:00
Месяцы и годы не имеют фиксированной длительности в миллисекундах, что влияет на арифметику.
Пример:
dayjs('2024-03-31').add(1, 'month')
// 2024-04-30
dayjs('2023-02-28').add(1, 'year')
// 2024-02-28
Неделя (week) обрабатывается как календарная единица,
состоящая из 7 дней. Начало недели зависит от локали и может быть
изменено через локализационные настройки.
dayjs().add(2, 'week')
dayjs().startOf('week')
Особенность: при работе с неделями учитывается календарный контекст, а не фиксированная временная шкала.
Миллисекунды (millisecond) представляют минимальную
единицу в Day.js. Вся внутренняя модель времени базируется на Unix
timestamp в миллисекундах.
dayjs().valueOf() // текущее время в ms
dayjs().unix() // секунды Unix-времени
Сравнение:
valueOf() → миллисекундыunix() → секундыПри арифметике с миллисекундами используется точная линейная модель без календарных корректировок.
dayjs().add(500, 'millisecond')
При выходе за пределы диапазона единицы происходит автоматическое перераспределение:
dayjs().add(90, 'second')
90 секунд преобразуются в 1 минуту 30 секунд.
Комбинированные операции выполняются последовательно:
dayjs()
.add(1, 'day')
.add(2, 'hour')
.add(30, 'minute')
Каждая операция изменяет базовый объект, формируя новую дату.
Некоторые плагины расширяют систему единиц:
Позволяет отображать относительное время:
dayjs().from(dayjs().add(1, 'day'))
Используются те же базовые единицы измерения.
Подключаемый модуль длительностей:
dayjs.duration(2, 'hour')
dayjs.duration(90, 'minute')
Поддерживаются те же ключи единиц, что и в основной API.
Неверные значения игнорируются или приводят к некорректному результату:
dayjs().add(1, 'dayss') // ошибка логики или игнорирование
Месяц не эквивалентен 30 дням, что приводит к различиям при вычислениях:
dayjs().add(1, 'month') // ≠ 30 дней
day, hour, minute,
second — линейныеmonth, year, week —
календарныеНеправильное предположение о линейности приводит к расхождениям в вычислениях.
Система единиц измерения формирует основу всей временной модели библиотеки. Все операции — от парсинга до форматирования — опираются на унифицированные идентификаторы, которые обеспечивают предсказуемость поведения при работе с датами в разных календарных сценариях и временных зонах.