Функция getDaysInYear предназначена для определения
количества дней в конкретном календарном году на основе переданной даты.
Она учитывает григорианский календарь, включая високосные годы, и
возвращает либо 365, либо 366.
getDaysInYear используется в задачах, где требуется
точная календарная информация о структуре года:
Ключевая особенность заключается в том, что функция опирается не на фиксированное значение, а на конкретную дату, определяя соответствующий ей год.
getDaysInYear(date)
date — объект Date или значение,
приводимое к дате Может быть:
Datenumber — количество дней в году:
365 для обычного года366 для високосного годаВ основе работы лежит проверка года на високосность. В григорианском календаре правило выглядит следующим образом:
Год является високосным, если:
Именно это правило определяет, будет ли в году 365 или 366 дней.
Функция не принимает год напрямую — она извлекает его из переданной даты. Это позволяет:
import { getDaysInYear } from 'date-fns'
getDaysInYear(new Date(2024, 0, 1))
// 366
Год 2024 является високосным, поэтому результат — 366.
getDaysInYear(new Date(2023, 0, 1))
// 365
getDaysInYear('2022-05-15')
// 365
getDaysInYear(1672531200000)
// 365
Функция корректно приводит входное значение к объекту
Date.
Високосные годы возникают каждые 4 года, но с исключениями, связанными с кратностью 100 и 400.
| Год | Високосный | Дней |
|---|---|---|
| 2000 | да | 366 |
| 1900 | нет | 365 |
| 2020 | да | 366 |
| 2021 | нет | 365 |
Разница в один день влияет на:
Функция не анализирует календарь вручную, а опирается на вычисление даты внутри года. Концептуально процесс выглядит так:
Это делает поведение стабильным даже при передаче дат, находящихся в разных месяцах одного года.
const daysInYear = getDaysInYear(date)
const progress = dayOfYear / daysInYear
Используется для определения прогресса выполнения годовых задач.
const interest = principal * rate * (daysElapsed / getDaysInYear(date))
Позволяет корректно учитывать високосные годы при начислении процентов.
При анализе данных важно учитывать разную длину годов:
Без этой поправки сравнение годовых показателей становится некорректным.
Входные значения интерпретируются через стандартный
Date, поэтому:
Invalid Date;Функция работает с календарным годом, а не с локальными смещениями времени. Это означает:
Функция ориентирована строго на григорианский календарь:
В рамках библиотеки существует несколько функций, работающих с годом:
getYear — возвращает номер года;startOfYear — начало года;endOfYear — конец года;getDaysInYear — количество дней в году.getDaysInYearПри передаче даты в конце декабря или начале января результат будет зависеть только от года, а не от конкретного дня:
getDaysInYear(new Date(2024, 11, 31))
// 366
getDaysInYear(new Date(2025, 0, 1))
// 365
Обе даты принадлежат разным годам, и функция корректно отражает это.
Функция имеет постоянную сложность O(1), так как:
Это делает её пригодной для массового использования в больших датасетах.
getDaysInYear('invalid-date')
// NaN
Результат становится некорректным из-за невозможности распознать дату.
Ошибкой считается ручное использование значения 365 вместо функции, особенно в аналитических системах, где встречаются високосные периоды.
getDaysInYear часто используется как базовый элемент при
построении более сложных вычислений:
Она служит точкой нормализации между календарной логикой и числовыми моделями времени.