Февраль и strtotime

Хорошо?

Я пытаюсь нажать дату расчета здесь, но я не получаю ..

Что происходит, так это следующее:

$AtualMenos3 = date("mdY", strtotime("2013-03-31 -3 month")); $AtualMenos2 = date("mdY", strtotime("2013-03-31 -2 month")); $AtualMenos1 = date("mdY", strtotime("2013-03-31 -1 month")); $AtualMes = date("mdY", strtotime("2013-03-31")); 

Правильно должно быть:

 03-31-2013 02-28-2013 01-31-2013 12-31-2012 

Тем не менее, этот php вычисляет дату неправильно, потому что, когда месяц февраль (который имеет только 28 дней), расчет идет не так.

Реальный выход:

 03-31-2013 03-03-2013 01-31-2013 12-31-2012 

Кто-нибудь знает, дайте мне понять, как я это исправить? потому что это сложно .. У меня нет идей … Я ничего не могу придумать: \

  $datetime = new DateTime('2013-03-31'); $datetime->modify('-1 month'); echo $datetime->format('Ym-t') . "<br>"; $datetime->modify('-1 month'); echo $datetime->format('Ym-t') . "<br>"; $datetime->modify('-1 month'); echo $datetime->format('Ym-t') . "<br>"; 

Смотрите это в действии

Обходным путем для поиска последнего дня месяца было бы:

  $lastDay = date("mdY",(strtotime('next month',strtotime(date("m-01-Y"))) - 1)); 

Надеюсь, это поможет.

Если вы хотите придерживаться strtotime() , вы можете легко вычислить последний день месяца, вычитая один день со следующего месяца.

 echo date("mdY", strtotime("Apr 2013 -1 day")); // yields 03-31-2013 echo date("mdY", strtotime("Mar 2013 -1 day")); // yields 02-28-2013 echo date("mdY", strtotime("Feb 2013 -1 day")); // yields 01-31-2013