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

考虑到:

$a_date = "2009-11-23"

我想要2009-11-30;鉴于

$a_date = "2009-12-23"

我要2009-12-31。


当前回答

对我来说,最优雅的是使用DateTime

我不知道我没有看到DateTime::createFromFormat,一行程序

$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");

其他回答

如果您使用的是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。

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

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

如果你知道一个月的最后一天,

public function getLastDateOfMonth($month)
    {
        $date = date('Y').'-'.$month.'-01';  //make date of month 
        return date('t', strtotime($date)); 
    }

$this->getLastDateOfMonth(01); //31

使用Zend_Date非常简单:

$date->setDay($date->get(Zend_Date::MONTH_DAYS));

还有一个内置的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