PHP Date函数跳过2月。有没有人知道这个日期错误的解决方法?

时间:2015-11-30 18:13:03

标签: php

我将在未来3个月展示月份游戏,并获得每个月的第1天和最后一天。

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.
};

十一月29,2015输出是:

December 2015
2015-12-01
2015-12-31
January 2016
2016-01-01
2016-01-31
February 2016
2016-02-01 
2016-02-29

直到昨天,2015年11月29日,这种情况一直很好,但今天是2015年11月30日,它跳过2月份。

十一月30,2015输出是:

December 2015
2015-12-01
2015-12-31
January 2016
2016-01-01
2016-01-31
March 2016
2016-03-01 
2016-03-31

我猜错了,但是有人知道有什么工作吗?

3 个答案:

答案 0 :(得分:3)

您可以使用DateInterval在当前日期添加一个月,这样您就可以获得当月的第一天和最后一天。

<?php
$date = new DateTime('2015-12-01');
$i = 0;
while($i < 3){
    printf("%s | first day: %s, | last day: %s <br>", $date->format('F Y'), $date->format('d'), $date->format('t'));
    $date->add(new DateInterval('P1M'));
    $i++;
}

输出:

December 2015 - first day: 01, | last day: 31
January 2016 - first day: 01, | last day: 31
February 2016 - first day: 01, | last day: 29 

答案 1 :(得分:3)

感谢@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));
};

这似乎很有效。

答案 2 :(得分:0)

如果需要下个月的最后一天,那么你可以使用这个

$d = new DateTime( '2010-01-31' );
$d->modify( 'last day of next month' );
echo $d->format( 'Y-m-d' ), "\n";