Как получить предыдущий и следующий месяц? - PullRequest
10 голосов
/ 14 октября 2010
$year  = 2010;
$month = 10;

Как получить предыдущий месяц 2010-09 и следующий месяц 2010-11?

Ответы [ 8 ]

18 голосов
/ 14 октября 2010
$date = mktime( 0, 0, 0, $month, 1, $year );
echo strftime( '%B %Y', strtotime( '+1 month', $date ) );
echo strftime( '%B %Y', strtotime( '-1 month', $date ) );
3 голосов
/ 14 октября 2010

попробуйте так:

$date = mktime(0, 0, 0, $month, 1, $year);
echo date("Y-m", strtotime('-1 month', $date));
echo date("Y-m", strtotime('+1 month', $date));

или, короче, вот так:

echo date("Y-m", mktime(0, 0, 0, $month-1, 1, $year));
echo date("Y-m", mktime(0, 0, 0, $month+1, 1, $year));
2 голосов
/ 14 октября 2010

PHP великолепен в этом отношении, он будет обрабатывать переполнение даты, исправляя дату для вас ...

$PreviousMonth = mktime(0, 0, 0, $month - 1, 1, $year);
$CurrentMonth = mktime(0, 0, 0, $month, 1, $year);
$NextMonth = mktime(0, 0, 0, $month + 1, 1, $year);

echo '<p>Next month is ' . date('Ym', $NextMonth) . 
    ' and previous month is ' . date('Ym', $PreviousMonth . '</p>';
1 голос
/ 14 октября 2010

Вы можете просто добавить 1 к текущему месяцу и посмотреть, пересекли ли вы год:

$next_year  = $year;
$next_month = ++$month;

if($next_month == 13) {
  $next_month = 1;    
  $next_year++;
}

Аналогично для предыдущего месяца вы можете сделать:

$prev_year  = $year;
$prev_month = --$month;

if($prev_month == 0) {
  $prev_month = 12;
  $prev_year--;
}
1 голос
/ 14 октября 2010
$prevMonth = $month - 1;
$nextMonth = $month + 1;
$prevYear = $year;
$nextYear = $year;

if ($prevMonth < 1) {
    $prevMonth = 1;
    $prevYear -= 1;
}

if ($nextMonth > 12) {
    $nextMonth = 1;
    $nextYear += 1
}

или

// PHP > 5.2.0
$date = new DateTime();
$date->setDate($year, $month, 1);
$prevDate = $date->modify('-1 month');
$nextDate = $date->modify('+1 month');
// some $prevDate->format() and $nextDate->format() 
0 голосов
/ 01 марта 2017
 setlocale(LC_TIME,"turkish");
 $Currentmonth=iconv("ISO-8859-9","UTF-8",strftime('%B'));
 $Previousmonth=iconv("ISO-8859-9","UTF-8",strftime('%B',strtotime('-1 MONTH')));
 $Nextmonth=iconv("ISO-8859-9","UTF-8",strftime('%B',strtotime('+1 MONTH')));

echo $Previousmonth; // Şubat /* 2017-02 */
echo $Currentmonth; // Mart /* 2017-03 */
echo $Nextmonth; // Nisan /* 2017-04 */
0 голосов
/ 08 января 2014
     echo date('Y-m-d', strtotime('next month'));
0 голосов
/ 14 октября 2010

strftime *: - * Отформатируйте время и / или дату в соответствии с настройками локали. Имена месяцев и дней недели, а также другие зависящие от языка строки соответствуют текущей локали, установленной с помощью setlocale ().

strftime( '%B %Y', strtotime( '+1 month', $date ) );
strftime( '%B %Y', strtotime( '-1 month', $date ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...