Когда объект datetime имеет дату «2012-01-30», у нас есть следующий объект:
object(DateTime)#1233 (3) {
["date"]=>
string(19) "2012-01-30 00:00:00"["timezone_type"]=>
int(3)
["timezone"]=>
string(9) "ETC/GMT+3"}
Но когда добавляется месяц:
$date->add(new DateInterval('P1M'));
Это приведет к следующему объекту:
object(DateTime)#1233 (3) {
["date"]=>
string(19) "2012-03-01 00:00:00"["timezone_type"]=>
int(3)
["timezone"]=>
string(9) "ETC/GMT+3"}
Следует добавить месяц, поэтому отображаемая дата должна быть
«2012-02-28», поэтому февраль 2012 года, а не март 2012 года.
Как я мог это исправить?
попробуй это
function add($date_str, $months)
{
$date = new DateTime($date_str);
$start_day = $date->format('j');
$date->modify("+{$months} month");
$end_day = $date->format('j');
if ($start_day != $end_day)
$date->modify('last day of last month');
return $date;
}
$result = add('2011-01-31', 1); // 2011-02-28
Других решений пока нет …