Remember if you just want the days in the current month, use the date function:
$days = date("t");
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
cal_days_in_month — 指定した年とカレンダーについて、月の日数を返す
この関数は、指定した calendar
について
year
年 month
月の日数を返します。
calendar
計算に使用するカレンダー。
month
選択したカレンダーにおける月。
year
選択したカレンダーにおける年。
指定したカレンダーの、その月の日数を返します。
例1 cal_days_in_month() の例
<?php
$number = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "2003 年 8 月の日数は {$number} 日です";
?>
Remember if you just want the days in the current month, use the date function:
$days = date("t");
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
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;
}
}