Функция isLeapYear в date-fns предназначена для определения високосного года на основе календарной логики Григорианского календаря. Проверка выполняется строго по математическому правилу делимости года и не зависит от локали, временной зоны или настроек окружения, так как анализируется только числовое значение года.
Високосный год определяется по следующему набору правил:
Эта логика формирует детерминированный алгоритм, который одинаково применяется во всех календарных системах, использующих Григорианский стандарт.
В библиотеке date-fns функция имеет следующий формат:
isLeapYear(date: Date | number): boolean
Аргументом может выступать:
Возвращаемое значение — булево:
true — год является високоснымfalse — год не является високоснымФункция извлекает год из переданного значения даты и применяет последовательную проверку делимости:
getFullYear().Логика может быть выражена эквивалентным псевдокодом:
function isLeapYear(date) {
const year = getYear(date)
if (year % 400 === 0) return true
if (year % 100 === 0) return false
if (year % 4 === 0) return true
return false
}
При передаче экземпляра Date используется локальное
календарное представление года. Это означает, что:
Пример:
import { isLeapYear } from "date-fns"
isLeapYear(new Date(2020, 0, 1)) // true
isLeapYear(new Date(2021, 6, 15)) // false
При передаче числа функция интерпретирует его как миллисекунды с Unix-эпохи:
isLeapYear(1609459200000) // 2021-01-01 → false
Такой подход обеспечивает совместимость с системами, где даты хранятся в виде числовых значений.
Годы вроде 1900 или 2100 не являются високосными, несмотря на делимость на 4:
isLeapYear(new Date(1900, 0, 1)) // false
Это связано с корректировкой календарного дрейфа.
Годы 1600, 2000, 2400 считаются високосными:
isLeapYear(new Date(2000, 0, 1)) // true
Это компенсация накопленной ошибки календаря.
В date-fns функция реализована как чистая функция без побочных эффектов. Она:
Это делает её предсказуемой в любых условиях выполнения, включая серверные среды и браузеры.
При передаче некорректных данных поведение зависит от возможности преобразования в дату:
Invalid Date приводит к некорректному результату
(обычно false);Date или
number.Пример:
isLeapYear(new Date("invalid")) // false
Определение високосного года применяется для:
Пример логики проверки февраля:
function getDaysInFebruary(date) {
return isLeapYear(date) ? 29 : 28
}
В экосистеме date-fns isLeapYear часто используется совместно с:
getDaysInMonth — определение количества дней в
месяце;setYear — изменение года у даты;addYears — арифметика годов;startOfYear — нормализация даты к началу года.Комбинация этих функций позволяет строить календарные вычисления без ручной работы с объектом Date API.
Алгоритм ориентирован на Григорианский календарь и применяется ретроспективно. Это означает:
Функция имеет постоянную сложность O(1), так как:
Это делает её подходящей для массовых вычислений, например при генерации календарей или обработке больших массивов дат.
Часто встречаются следующие ошибки:
Date без предварительного
преобразования;Корректная логика всегда сводится к анализу года, а не конкретного календарного дня.