2016-02-10 3 views
-4

Мне нужно повторить 3 предыдущих месяца из строки.Получить предыдущие месяцы из строки

$monthyear = "01/2015"; 

ВЫВОД

  1. 12/2014
  2. 11/2014
  3. 10/2014
+1

http://php.net/manual/en/class.datetime.php – C2486

+1

Возможный дубликат [Как я могу получить текущий месяц и предыдущие три месяца, используя PHP] (http://stackoverflow.com/questions/1594277/how-can-i-get-the-current-month-and-previous-three-months-using-php) – Chris

ответ

0

Идите и попробуйте следующее:

<?php 
    // Given string: 
    $monthyear = "01/2015"; 

    // Init DateTime object: 
    $datetime = new DateTime(); 
    // Create a new datetime instance, and parse given string: 
    $date = $datetime->createFromFormat('m/Y', $monthyear); 

    // Loop for 3 iterations: 
    for ($i = 1; $i <= 3; $i++) { 
     // Print current date: 
     echo $i . ". " . ($date->format('m/Y')) . "<br>"; 
     // Reduce one month: 
     $date = date_add($date, date_interval_create_from_date_string('-1 months')); 
    } 

?> 

Yealds:

1. 01/2015 
2. 12/2014 
3. 11/2014 

Вы можете проверить этот код в phpfiddle.org

Источники:

+0

Thnk вы сэр .. это очень полезно –

0

Так что вы пытаетесь сделать здесь получить диапазон (3 месяца назад до настоящего времени) с определенным интервалом (1 месяц). Это легко сделать с чем-то вроде класса PHP DatePeriod.

Сначала вам нужно создать объект DateTime из этой строки, который вы можете сделать, используя что-то вроде DateTime::createFromFormat. Объект DateTime может использоваться как ваш окончание печати.

$endRange = DateTimeImmutable::createFromFormat("m/Y", $monthyear); 

Во-вторых, вы можете вычесть 3 месяца из этого DateTime объекта с использованием DateTime::sub для того, чтобы получить стартовый диапазон. Для этого вы используете объект DateInterval, чтобы указать интервал времени, который вы хотите вычесть из объекта DateTime.

$startRange = $endRange->sub(new DateInterval('P3M')); 

Наконец, вы можете создать свой DatePeriod объект с помощью $startRange и $endRange вместе с DateInterval от 1 месяца и пройти через объект, чтобы получить 3 желаемые даты.

$period = new DatePeriod($startRange, new DateInterval('P1M'), $endRange); 

foreach($period as $date) { 
    echo $date->format("m/Y"); 
} 

Это должно дать вам желаемые даты 10/2014, 11/2014 и 12/2014.

Смежные вопросы