В алгоритмах: Как правильно рассчитать количество дней в феврале с учетом високосного года в PHP (проверка кратности 4, 100 и 400)?

Определение количества дней в феврале — классическая задача, требующая корректной реализации алгоритма проверки високосного года. Григорианский календарь устанавливает следующие правила: год является високосным, если он кратен 4, НО не кратен 100, ИЛИ кратен 400. Февраль в високосный год содержит 29 дней, в обычный — 28.

**Алгоритм проверки на PHP**

Самый прозрачный способ — реализовать логику вручную:

php
function isLeapYear(int $year): bool {
return ($year % 4 === 0 && $year % 100 !== 0) || ($year % 400 === 0);
}

function getDaysInFebruary(int $year): int {
return isLeapYear($year) ? 29 : 28;
}

// Пример использования
$year = 2024;
echo getDaysInFebruary($year); // Выведет: 29

**Разбор логики**

— `$year % 4 === 0` — год делится на 4 (базовое условие).
— `$year % 100 !== 0` — исключаем вековые годы (1900 — не високосный).
— `$year % 400 === 0` — возвращаем вековые годы, кратные 400 (2000 — високосный).

Примеры:
— 2024: делится на 4, не делится на 100 → **29 дней**
— 1900: делится на 100, не делится на 400 → **28 дней**
— 2000: делится на 400 → **29 дней**
— 2023: не делится на 4 → **28 дней**

**Встроенные функции PHP**

PHP предоставляет готовые инструменты, которые избавляют от ручной реализации:

php
// Способ 1: через date()
$days = (int) date(‘t’, mktime(0, 0, 0, 2, 1, $year));

// Способ 2: через DateTime
$date = new DateTime(«{$year}-02-01»);
$days = (int) $date->format(‘t’);

// Способ 3: через checkdate и cal_days_in_month
$days = cal_days_in_month(CAL_GREGORIAN, 2, $year);

Функция `date(‘t’, …)` возвращает количество дней в месяце для указанной временной метки. Это наиболее лаконичный и надёжный способ.

**Рекомендации**

1. Для production-кода предпочтительнее использовать встроенные функции PHP — они учитывают все edge cases.
2. Ручная реализация полезна для понимания алгоритма и в учебных целях.
3. При работе с датами до 1970 года используйте класс `DateTime`, а не `mktime`, чтобы избежать проблем с Unix timestamp.
4. Всегда валидируйте входной год (должен быть положительным целым числом).

Таким образом, корректная проверка високосного года требует трёхступенчатой проверки делимости, и PHP предоставляет как инструменты для ручной реализации, так и готовые встроенные решения.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.