PHP 8.4.1 Released!

cal_days_in_month

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

cal_days_in_month指定した年とカレンダーについて、月の日数を返す

説明

cal_days_in_month(int $calendar, int $month, int $year): int

この関数は、指定した calendar について yearmonth 月の日数を返します。

パラメータ

calendar

計算に使用するカレンダー。

month

選択したカレンダーにおける月。

year

選択したカレンダーにおける年。

戻り値

指定したカレンダーの、その月の日数を返します。

例1 cal_days_in_month() の例

<?php
$number
= cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "2003 年 8 月の日数は {$number} 日です";
?>

add a note

User Contributed Notes 3 notes

up
145
brian at b5media dot com
16 years ago
Remember if you just want the days in the current month, use the date function:
$days = date("t");
up
45
dbindel at austin dot rr dot com
20 years ago
Here's a one-line function I just wrote to find the numbers of days in a month that doesn't depend on any other functions.

The reason I made this is because I just found out I forgot to compile PHP with support for calendars, and a class I'm writing for my website's open source section was broken. So rather than recompiling PHP (which I will get around to tomorrow I guess), I just wrote this function which should work just as well, and will always work without the requirement of PHP's calendar extension or any other PHP functions for that matter.

I learned the days of the month using the old knuckle & inbetween knuckle method, so that should explain the mod 7 part. :)

<?php
/*
* days_in_month($month, $year)
* Returns the number of days in a given month and year, taking into account leap years.
*
* $month: numeric month (integers 1-12)
* $year: numeric year (any integer)
*
* Prec: $month is an integer between 1 and 12, inclusive, and $year is an integer.
* Post: none
*/
// corrected by ben at sparkyb dot net
function days_in_month($month, $year)
{
// calculate number of days in a month
return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
}
?>

Enjoy,
David Bindel
up
2
datlx at yahoo dot com
2 years ago
function lastDayOfMonth(string $time, int $deltaMonth, string $format = 'Y-m-d')
{
try {
$year = date('Y', strtotime($time));
$month = date('m', strtotime($time));

$increaYear = floor(($deltaMonth + $month - 1) / 12);

$year += $increaYear;
$month = (($deltaMonth + $month) % 12) ?: 12;
$day = cal_days_in_month(CAL_GREGORIAN, $month, $year);

return $time . ' + ' . $deltaMonth . ' => ' . date($format, strtotime($year . '-' . $month . '-' . $day)) . "\n";
} catch (Exception $e) {
throw $e;
}
}
To Top