我需要一种在 PHP 中向任何日期添加月数的方法。我知道如何在 MySQL 中执行此操作,但不知道如何在 PHP 中执行此操作。这是我的尝试:
MySQL:
SELECT DATE_ADD( '2011-12-29', INTERVAL 2
MONTH ) // Output "2012-02-29"
SELECT DATE_ADD( '2011-12-30', INTERVAL 2
MONTH ) // output "2012-02-29"
SELECT DATE_ADD( '2011-12-31', INTERVAL 2
MONTH ) // output "2012-02-29"
PHP:
$date = date_create('2011-12-29');
$date->modify("+1 month");
echo $date->format("Y-m-d");
// Output is "2012-01-29" -- this is correct
$date = date_create('2011-12-30');
$date->modify("+2 month");
echo $date->format("Y-m-d");
// Output is "2012-03-01" -- I need the answer like "2012-02-29"
$date = date_create('2011-12-31');
$date->modify("+2 month");
echo $date->format("Y-m-d");
// Output is "2012-03-02" -- I need the answer like "2012-02-29"
MySQL 输出正确。我在 PHP 中需要相同的输出。
最佳答案
如果你使用 PHP5 >= 5.3,你需要做的就是使用
$date->modify("last day of +2 months");
如其他答案中所建议。但是如果你使用 5.2,你可以尝试像这样改变你的代码:
Class DateTimeM Extends DateTime
{
public function modify ($modify)
{
$day = $this->format ('d');
$buf = new DateTime ($this->format ('Y-m-01\TH:i:sO'));
$buf->modify ($modify);
if ($day > $buf->format ('t'))
{
$this->setDate ($buf->format ('Y'), $buf->format ('m'), $buf->format ('t'));
}
else
{
$this->setDate ($buf->format ('Y'), $buf->format ('m'), $day);
}
$this->setTime ($buf->format ('H'), $buf->format ('i'), $buf->format ('s'));
return $this;
}
}
$date = new DateTimeM ('2011-12-29');
$date->modify("+2 month");
echo $date->format("Y-m-d");
我建议将类定义添加到一个单独的文件中并 require_once()
它。从 date_create()
切换到使用新类的对象构造函数。新类的 modify()
方法将使用原始给定月份的第一天而不是最后一天修改日期,并检查原始给定月份的天数是否大于新月份的天数。
这种方法的一个好处是它也适用于 $date->modify ('2 year 2 month')
。
关于php - 需要添加日期中的月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8709228/