这个是PHP的一个bug,就是如果本月有31天,那么在本月31日的基础上增加(或减少)n个月,如果目标月份的天数少于31,那么就会把相差的天数累加到下一个月,比如今天是2023-01-31,那么增加一个月就是2023-03-03,2月份是个特殊月份,其它的月份比如2023-03-31增加一个月会得到2023-05-01。
解决的办法最好是自己写个处理月份加减的函数,比如当要计算的日期是29、30、31时,就要做特殊的处理,其他日期就按正常方法处理。
下面的是提供的参考方法:
// +----------------------------------------------------------------------
// | @Des:给定时间戳 加一月 如果下一个月天数不够就自动返回下一月最后一天
// | $time:给定的时间戳
// | $key:加几个月
// +----------------------------------------------------------------------
public function accumulatedDate($time, $key)
{
$day = date("d", $time);
if ($day == "29" || $day == "30" || $day == "31") {
//获取下月最后一天
$BeginDate = date("Y-m", strtotime("+$key month"));
$next_month_day = date('d', strtotime("$BeginDate -1 day"));
if ($next_month_day >= $day) {
//如果下月最后一天大于等于$day,正常返回
$date = date('Y-m-' . $day, strtotime("$BeginDate -1 day"));
return strtotime($date);
} else {
//如果下月最后一天小于$day,返回下月最后一天
$date = date('Y-m-d', strtotime("$BeginDate -1 day"));
return strtotime($date);
}
} else {
$date = date("Y-m-d", strtotime("+$key month", $time));
return strtotime($date);
}
}