我想计算日历中的下 X 天。
例如今天是 2012-10-08。如果 X=25 我希望它返回 2012-10-25 但如果 X=06 我希望返回 2012-11-06。如果该月没有所需的 X 天,则必须返回该月的最后一天(例如,如果我要查找 2 月 30 日,则如果闰年,则必须返回 28 或 29)
这似乎很简单,但我被所有特殊情况(一年中的最后一个月,28-31 天等)抓住了。
我想计算日历中的下 X 天。
例如今天是 2012-10-08。如果 X=25 我希望它返回 2012-10-25 但如果 X=06 我希望返回 2012-11-06。如果该月没有所需的 X 天,则必须返回该月的最后一天(例如,如果我要查找 2 月 30 日,则如果闰年,则必须返回 28 或 29)
这似乎很简单,但我被所有特殊情况(一年中的最后一个月,28-31 天等)抓住了。
您可以使用strtotime()
和t
:
$x = 5; // given day
if(date('t') < $x){ // check if last day of the month is lower then given day
$x = date('t'); // if yes, modify $x to last day of the month
}
$month = date('m'); // current month
if(date('d') >= $x){ // if $x day is now or has passed
$month = $month+1; // increase month by 1
}
$year = date('Y'); // current year
if($month > 12){ // if $month is greater than 12 as a result from previous if
$year = date('Y')+1; // increase year
$month = 1; // set month to January
}
if(date('t', strtotime($year.'-'.$month.'-01')) < $x){ // check if last day of the new month is lower then given day
$x = date('t', strtotime($year.'-'.$month.'-01')); // if yes, modify $x to last day of the new month
}
$date = date('d F Y', strtotime($year.'-'.$month.'-'.$x));
// 05 November 2012
这是一个很好的教程。