Какое лучшее решение для получения следующего и предыдущего месяца с данной даты php

Я хочу получить следующий и предыдущий месяц с указанной даты. это мой код.

$ month = '2011-01-20';

$ prevMOnth = funP ($ month); $ nextMonth = funN ($ month);

что является лучшим решением для этого.

$next_month_ts = strtotime('2011-01-20 +1 month'); $prev_month_ts = strtotime('2011-01-20 -1 month'); $next_month = date('Ym-d', $next_month_ts); $prev_month = date('Ym-d', $prev_month_ts); 

Код, упомянутый выше, может не работать в конце месяца с 31 днем ​​(или мартом): $ prev_month_ts = strtotime ('2011-01-20 -1 month');

Это лучшее решение для получения названия предыдущего месяца . Получите дату первого месяца этого месяца, затем вычтите 1 день, затем получите название месяца:

 date('F', strtotime('-1 day', strtotime(date('Ym-01')))); 

И получите название следующего месяца . Получите дату последнего дня в этом месяце, затем добавьте 1 день, затем введите название месяца:

 date('F', strtotime('+1 day', strtotime(date('Ym-t')))); 

не знаю, если это лучший способ сделать это, но он встроен в php, проверьте strtotime

EDIT: пример кода

 $month = '2011-01-20'; $timestamp = strtotime ("+1 month",strtotime ($month)); $nextMonth = date("Ymd",$timestamp); 
 $date = "2012-01-25"; $priormonth = date ('m', strtotime ( '-1 month' , strtotime ( $date ))); $futuremonth = date ('m', strtotime ( '+1 month' , strtotime ( $date ))); echo $priormonth; // this will equal 12 echo "<br/>"; echo $futuremonth; // this will equal 02 

Решение «-1 месяц» является ненадежным, если месяц имеет 31 день (например, упоминается ALeX inSide). Вот функция, которая возвращает дату любого желаемого количества месяцев до указанной даты: (она фактически возвращает дату первого дня)

 function getAnyPreviousMonthDate( $monthsBefore = null, $startDate = null ) { $monthsBefore = $monthsBefore ?? 1; //php7 $monthsBefore = abs($monthsBefore); $c = $startDate ?? date('Ym-d'); for($i==0; $i<$monthsBefore; $i++) { $c = date('Ym-d', strtotime('first day of previous month '.$c)); } return $c; } 

поэтому, если мы это сделаем так:

 echo getAnyPreviousMonthDate(3); // we will get the first day of past 3 months from now echo getAnyPreviousMonthDate(1, '2015-10-31'); // will return: '2015-09-01'