从任何日期开始计算+N个月周期(考虑闰年)


Calculate +N Monthly Cycles Starting from Any Date (Leap Years Taken into Account)

我有一个随机的开始日期(例如2012-09-19)。我想在这个日期之后很容易得到每月周期的结束日期。然而,每月的周期并不完全是30天,而是从一个日期到另一个日期,例如9月19日到10月19日。

考虑到闰年,我想很容易地计算订阅开始后的第5个月或第500个月的开始和结束日期。例如,如果订阅从闰年的2月29日开始,而非闰年的二月到来,则该期间的结束日期应为2月28日,而不会将未来的月度周期替换一天。

这看起来很容易,使用strtotime();

假设初始日期是2012-02-29。

function addToDate($date, $add){
        if(!strtotime($date)) return FALSE;
        $date = strtotime($date);
        return strtotime($add, $date);
}
$result = addToDate('2012-02-29', '+50 months');
echo date('Y-m-d', $result);

将于2016年4月29日公布。