PHP:计算每月/每年的结算日期 - 下个月的同一天

时间:2017-07-28 08:48:10

标签: datetime

我一直在寻找一种方法,以一种不会跳过一个月的方式准确计算下一个/未来的结算日期。例如,对于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;

}

0 个答案:

没有答案