В JavaScript-библиотеках для работы с датами концепция «день года» (day of year) используется для представления даты как порядкового номера в пределах календарного года. Значение находится в диапазоне от 1 до 365, а в високосный год — до 366. Такая модель упрощает задачи анализа временных рядов, календарных расчётов и нормализации дат.
В Day.js работа с днём года реализуется через дополнительный плагин
dayOfYear, поскольку базовая сборка библиотеки не включает
эту функциональность.
Для начала требуется установить библиотеку и подключить расширение:
npm install dayjs
Далее подключается основной модуль и плагин:
import dayjs from 'dayjs'
import dayOfYear from 'dayjs/plugin/dayOfYear'
dayjs.extend(dayOfYear)
После расширения экземпляры Day.js получают доступ к методу
dayOfYear().
Метод без аргументов возвращает порядковый номер дня в году:
const date = dayjs('2026-05-23')
console.log(date.dayOfYear()) // например: 143
Поведение метода зависит от локальной даты и учитывает:
Метод dayOfYear(value) позволяет задать дату, исходя из
порядкового номера дня в году:
const date = dayjs().dayOfYear(100)
console.log(date.format('YYYY-MM-DD'))
В результате будет получена дата, соответствующая 100-му дню текущего года.
При установке значения Day.js пересчитывает дату относительно начала года:
const base = dayjs('2026-01-01')
const updated = base.dayOfYear(60)
console.log(updated.format('YYYY-MM-DD'))
Логика преобразования:
В високосные годы диапазон расширяется до 366 дней:
const leap = dayjs('2024-12-31')
console.log(leap.dayOfYear()) // 366
При установке значения, превышающего допустимый диапазон, поведение нормализуется:
dayjs('2024-01-01').dayOfYear(370)
Результат будет перенесён на следующий год с корректировкой остатка дней.
Частая задача — восстановление даты из порядкового номера дня:
function fromDayOfYear(year, n) {
return dayjs(`${year}-01-01`).dayOfYear(n)
}
console.log(fromDayOfYear(2026, 200).format('YYYY-MM-DD'))
Такая конструкция используется при обработке:
Перед установкой дня года часто требуется ограничение диапазона:
function safeDayOfYear(date, n) {
const max = date.isLeapYear() ? 366 : 365
const clamped = Math.min(Math.max(n, 1), max)
return date.dayOfYear(clamped)
}
Это предотвращает выход за границы календарного года и упрощает обработку пользовательского ввода.
Использование дня года упрощает вычисления, которые в стандартном формате требуют дополнительных операций:
Пример эквивалентного вычисления:
const a = dayjs('2026-02-01').dayOfYear()
const b = dayjs('2026-05-23').dayOfYear()
console.log(b - a)
Механизм дня года используется в сценариях, где календарная структура менее важна, чем линейная шкала времени:
При работе с большими значениями происходит автоматическое смещение:
dayjs('2025-12-31').dayOfYear(10)
Такой вызов приведёт к переходу на следующий год и корректному вычислению даты относительно нового начала года.
Метод dayOfYear хорошо комбинируется с другими
операциями Day.js:
const result = dayjs('2026-01-01')
.add(2, 'year')
.dayOfYear(150)
.format('YYYY-MM-DD')
Подобные цепочки позволяют строить предсказуемые трансформации дат без промежуточных вычислений вручную.