W3docs

cal_days_in_month()

Функция cal_days_in_month() в PHP возвращает количество дней в месяце для заданного календаря, месяца и года.

Функция PHP cal_days_in_month() возвращает количество дней в месяце для заданного календаря, месяца и года. Поскольку она учитывает високосные годы и различные календарные системы, она надёжнее, чем хранение фиксированных значений или ручной расчёт с учётом високосного года. На этой странице описаны её сигнатура, рабочие примеры (включая високосные годы и юлианский календарь), распространённые ошибки и обычная альтернатива при недоступном расширении Calendar.

Синтаксис

cal_days_in_month(int $calendar, int $month, int $year): int
ПараметрОписание
$calendarИспользуемый календарь: CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH или CAL_FRENCH.
$monthНомер месяца в выбранном календаре (112 для григорианского/юлианского).
$yearГод в виде целого числа.

Функция возвращает количество дней в виде int. cal_days_in_month() входит в состав расширения Calendar, которое поставляется в комплекте с PHP, но должно быть включено (по умолчанию оно включено в большинстве сборок). Если расширение отсутствует, функция не существует; см. Без расширения Calendar ниже.

Базовое использование

Передайте константу календаря, месяц и год:

php— editable, runs on the server

Будет напечатано There are 31 days in January 2022.

Обработка високосных лет

Функция автоматически учитывает високосные годы, поэтому февраль возвращает 28 или 29 без какой-либо дополнительной логики с вашей стороны:

<?php
echo cal_days_in_month(CAL_GREGORIAN, 2, 2020); // 29 — 2020 is a leap year
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 2023); // 28 — 2023 is not
?>

Перечисление каждого месяца в году

Распространённая задача — построение календаря или выпадающего списка дат. Переберите 12 месяцев в цикле:

<?php
$year = 2024;
$names = ['January', 'February', 'March', 'April', 'May', 'June',
          'July', 'August', 'September', 'October', 'November', 'December'];

for ($month = 1; $month <= 12; $month++) {
    $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    echo "{$names[$month - 1]} $year: $days days\n";
}
?>

Для 2024 года (високосного) будет напечатано February 2024: 29 days, а все остальные месяцы покажут своё обычное количество дней.

Использование другого календаря

Изменение первого аргумента переключает календарную систему. Юлианский календарь, например, считает 1900 год високосным, тогда как григорианский — нет:

<?php
echo cal_days_in_month(CAL_JULIAN, 2, 1900);    // 29
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 1900); // 28
?>

Распространённые ошибки

  • Недопустимый месяц или год: передача месяца за пределами допустимого диапазона (например, 13 или 0) вызывает предупреждение и возвращает false, а не количество дней. Проверяйте входные данные перед вызовом функции.
  • Приведение типов: false условно равно 0. Используйте строгую проверку (if ($days === false)), а не if (!$days) при обработке ошибок.
  • Зависимость от расширения: функция существует только при загруженном расширении Calendar. В переносимом коде используйте function_exists('cal_days_in_month').

Без расширения Calendar

Если расширение Calendar недоступно, класс DateTime (всегда доступен) даёт тот же результат для григорианского календаря с помощью формата t, который возвращает количество дней в месяце:

<?php
$date = new DateTime('2024-02-01');
echo $date->format('t'); // 29
?>

Это наиболее переносимый вариант для григорианского календаря, не требующий дополнительных расширений.

Заключение

cal_days_in_month() возвращает количество дней в месяце для заданного календаря и года, автоматически обрабатывая високосные годы и несколько календарных систем. Используйте её, когда работаете с расширением Calendar или нужен негригорианский календарь; в противном случае DateTime::format('t') является альтернативой без зависимостей.

Для продолжения работы с датами в PHP смотрите PHP Date and Time и функцию checkdate() для проверки григорианских дат.

Диаграмма

graph LR
A[Input Calendar Type, Month, and Year] -- cal_days_in_month --> B[Output Number of Days]

Практика

Практика
Что делает функция cal_days_in_month() в PHP?
Что делает функция cal_days_in_month() в PHP?
Was this page helpful?