date — Исправлена ​​ошибка скачка года при добавлении переполнения стека за месяц

Когда объект 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 года.

Как я мог это исправить?

2

Решение

попробуй это

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]