我一直在寻找一种方法,以一种不会跳过一个月的方式准确计算下一个/未来的结算日期。例如,对于Jun 31,我希望下一个结算日期是2月28日(或适用时为29)。 我找到了great solution。 以下是该代码的更新,以支持将来超过1个月。 希望有所帮助。
代码:
function calculateBillingDate($startDate, $numberOfCycles = 1) {
$currentMonth = date('n', $startDate);
$nextMonth = (($currentMonth + $numberOfCycles) % 12);
if ($nextMonth === 0) {
$nextMonth = 12;
}
$targetDate = new \DateTime();
$targetDate->setTimestamp($startDate);
$targetDate->add(new \DateInterval('P' . $numberOfCycles . 'M'));
while ((int)$targetDate->format('m') !== $nextMonth) {
$targetDate->sub(new \DateInterval('P1D'));
}
return $targetDate;
}