Поиск последнего дня предыдущего месяца в PHP

Я немного не уверен, почему это не может найти последний день предыдущего месяца. Кажется, что все шаги работают правильно, за исключением случаев, когда создается окончательная дата.

<?php $currentMonth = date('n'); $currentYear = date('Y'); if($currentMonth == 1) { $lastMonth = 12; $lastYear = $currentYear - 1; } else { $lastMonth = $currentMonth -1; $lastYear = $currentYear; } if($lastMonth < 10) { $lastMonth = '0' . $lastMonth; } $lastDayOfMonth = date('t', $lastMonth); $lastDateOfPreviousMonth = $lastYear . '-' . $lastMonth . '-' . $lastDayOfMonth; $newLastDateOfMonth = date('F j, Y', strtotime($lastDateOfPreviousMonth)); ?> 

$lastDateOfPreviousMonth возвращает 2012-09-30, как и ожидалось; однако, после попытки конвертировать его до 30 сентября 2012 года – $newLastDateOfMonth возвращается 1 октября 2012 года. Где я, кажется, ошибаюсь?

EDIT: если используется date("t/m/Y", strtotime("last month")); или date('Ym-d', strtotime('last day of previous month')); будет ли любой из них по-прежнему жизнеспособным в 2013-01-01 годах, т.е. будут ли они учитывать изменения в году?

Solutions Collecting From Web of "Поиск последнего дня предыдущего месяца в PHP"

 echo date('Ym-d', strtotime('last day of previous month')); //2012-09-30 

или

 $date = new DateTime(); $date->modify("last day of previous month"); echo $date->format("Ymd"); 

Позже отредактируйте: документация php.net – относительные форматы для strtotime (), DateTime и date_create ()

Для этого есть php-функция.

 echo date("t/m/Y", strtotime("last month")); 

Первый день этого месяца минус 1 секунда.

 echo date('Ym-d',strtotime('-1 second',strtotime(date('m').'/01/'.date('Y')))); 

Пример здесь .

Для достижения этой цели вы можете использовать функции обработки нулевой точки strtotime() :

 # Day Before echo date('Ym-d', strtotime('2016-03-00')); // 2016-02-29 # Year can be handled too echo date('Ym-d', strtotime('2016-01-00')); // 2015-12-31 # Month Before echo date('Ym-d', strtotime('2016-00-01')); // 2015-12-01 # Month AND Day echo date('Ym-d', strtotime('2016-00-00')); // 2015-11-30 

Имеет смысл, если вы думаете о 00 как «на один меньше, чем первый (01)».

Поэтому для достижения цели этого вопроса «последний день предыдущего месяца» является простым примером

 date('your_format', strtotime('YYYY-ThisMonth-00')); # So: date('Ym-d', strtotime('2016-11-00')); // 2016-10-31