Если вы используете 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')
.