如何在PHP中获得每月的最后一天?

考虑到:

$a_date = "2009-11-23"

我想要2009-11-30;鉴于

$a_date = "2009-12-23"

我要2009-12-31。


当前回答

我知道这有点晚了,但我认为有一种更优雅的方式来使用PHP 5.3+使用DateTime类:

$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');

其他回答

T返回给定日期当月的天数(date参见文档):

$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));

还有一个内置的PHP函数cal_days_in_month()?

"此函数将返回指定日历的某月中的天数。" http://php.net/manual/en/function.cal-days-in-month。

echo cal_days_in_month(CAL_GREGORIAN, 11, 2009); 
// = 30

如果您使用的是32位系统,那么由于2038年问题,strtotime()代码将在2038年之后失败。

例如,在32位系统上,此代码将回显1970-01-31:

$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));

如果你需要你的代码支持32位系统,那么你应该使用DateTime函数:

$d = new DateTime('2040-11-23'); 
echo $d->format('Y-m-t');

该代码将在32位或64位系统上正确地输出2040-11-30。

你可以为下个月的第一天创建一个日期,然后使用strtotime("-1 day", $firstOfNextMonth)

如果你想回到几个月前,你也可以这样做。

 $list = [
        0, 1, 2, 3
    ];

    $date = new \Datetime();
    $dates = [];
    foreach($list as $item)
    {

        $set = clone $date;
        $set->modify("-$item month ");
       $dates[] = $set->modify("last day of this month");
       
    }
    return $dates;