Как получить название месяца из произвольного диапазона

В моем приложении laravel ввод выглядит следующим образом:

      $from_year = 2019;
$from_month = 10;

$to_year = 2020;
$to_month = 4;

Ожидаемый результат:

      months = [
'October 2019', 'November 2019', 'December 2019', 'January 2020', 'February 2020', 'March 2020', 'April 2020'
]

Заранее спасибо.

5 ответов

Решение
      $startDate = date($from_year.'-'.$from_month.'-01');
$diff = (($to_year - $from_year) * 12) + ($to_month - $from_month);

$months = [];
for($i=0;$i<=$diff;$i++) {
    $months[] = date('F Y', strtotime('+'.$i.' month', strtotime($startDate)));
}

простой код с date() функция

Вы можете использовать пару методов, использующих. Прежде всего, вы можете создать объекты текущей и конечной даты (с 1-м днем ​​месяца), а затем рассчитать разницу в месяцах, используя date_diff. Тогда это просто с добавлением месячного интервала.

Ванильное решение PHP будет выглядеть так:

      $from_year = 2019;
$from_month = 10;

$to_year = 2020;
$to_month = 4;

$date = new DateTime("$from_year-$from_month-01");
$diff = date_diff($date, new DateTime("$to_year-$to_month-01"));
$monthsDiff = $diff->y * 12 + $diff->m;
$interval = new DateInterval('P1M');

$monthsArray = [];

for($i = 0; $i <= $monthsDiff; $i++){
    $monthsArray[] = $date->format('F Y');
    $date->add($interval);
}

Кроме того, как видите, я использую format метод на DateTimeобъект. Подробнее о методе вы можете прочитать здесь .

      $from_year = 2019;
$from_month = 10;

$to_year = 2020;
$to_month = 4;

$start = strtotime($from_year . "-" . $from_month . "-01");
$end = strtotime($to_year . "-" . $to_month . "-01");
$months = [date("F Y",$start)];

while(strtotime(end($months)) < $end){
    $months[] = date("F Y",strtotime(end($months) . " +1 month"));
}

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

         <?php

$from_year = 2019;
$from_month = 10;

$to_year = 2020;
$to_month = 4;
$arr = [];
for($i=$from_year;$i<$to_year;$i++) {
    
    if($i==$from_year){
        $fmonth = $from_month;
    }else{
        $fmonth = 1;
    }
    for($j=$fmonth;$j<=12;$j++){
        array_push($arr,DateTime::createFromFormat('!m', $j)->format('F'). " ".$i);
    }
}
    for($i=1;$i<=$to_month;$i++){
        array_push($arr,DateTime::createFromFormat('!m', $i)->format('F'). " ".$to_year);
    }

print_r($arr);
?>

Это можно сделать с помощью библиотек Carbon и CarbonPeriod.

Вот как это происходит:

      use Carbon\Carbon;
use Carbon\CarbonPeriod;

$from_year = 2019;
$from_month = 10;

$to_year = 2020;
$to_month = 4;

$fromDate = new Carbon('1-' . $from_month . '-' . $from_year);
$toDate = new Carbon('1-' . $to_month . '-' . $to_year);

$differnces = CarbonPeriod::create($fromDate, '1 month', $toDate);

$differenceInDates = [];

foreach ($differnces as $differnce) {
    $differenceInDates[] = $differnce->format("M F");
}

Это даст вам желаемый результат.

Другие вопросы по тегам