PHP 日期函数跳过二月。有人知道解决此日期错误的方法吗?

Ang*_*gie 2 php

我将显示未来 3 个月的月份标题,以及每个月份的第一天和最后一天。

for($i = 1; $i < 4; $i++) { // For each month for 3 months
    $monthTitle = date('F Y', strtotime('+'.$i.' month'));
    $begin_date = date('Y-m-01', strtotime('+'.$i.' month')); // First day of calendar month in future.
    $end_date = date('Y-m-t', strtotime('+'.$i.' month')); // Last day of calendar months in future.
};
Run Code Online (Sandbox Code Playgroud)

2015 年 11 月 29 日的输出为:

December 2015
2015-12-01
2015-12-31
January 2016
2016-01-01
2016-01-31
February 2016
2016-02-01 
2016-02-29
Run Code Online (Sandbox Code Playgroud)

直到昨天,即 2015 年 11 月 29 日,这一切都很好,但今天 2015 年 11 月 30 日它跳过了二月。

2015 年 11 月 30 日的输出为:

December 2015
2015-12-01
2015-12-31
January 2016
2016-01-01
2016-01-31
March 2016
2016-03-01 
2016-03-31
Run Code Online (Sandbox Code Playgroud)

我猜是一个错误,但有人知道解决方法吗?

Ang*_*gie 5

感谢@devlin carnate 为我指明了正确的方向。

for($i = 1; $i < 4; $i++) { # for each month
    $tmp = date('Y-m-15'); // Get the middle of the month to avoid PHP date bug.
    $begin_date = date('Y-m-01', strtotime($tmp . '+'.$i.' month')); // First day of calendar month in future.
    $end_date = date('Y-m-t', strtotime($begin_date)); // Last day of calendar months in future.
    $monthTitle = date('F Y', strtotime($begin_date));
};
Run Code Online (Sandbox Code Playgroud)

这似乎工作得很好。