CarbonPeriod 二月过去

CarbonPeriod pass february

$start_day = $installment->'2021-01-29';
$end = Carbon::createFromFormat('Y-m-d', $start_day)->addMonth(24);
$period =  CarbonPeriod::create($start_day, '1month', $end);

$years = [];
foreach ($period as $date) {

    $years[$date->format("Y")][$date->format("m")]['title'] = $date->format("d ") .$date->format("n"));
    
}

结果

"29 January"
"01 March"

二月过去了。我希望它是 2 月 28 日而不是 3 月 1 日。 1 月 29 日、2 月 28 日和 3 月 29 日

这是正常行为,你会得到与 DatePeriod 相同的结果,如果一天高于一个月中的天数,它就会溢出,你仍然可以很容易地检测到这个溢出与当前日期相比你的第一个。

但是您应该更可能为此做一个简单的 for 循环,这样才不会矫枉过正:

$start_day = '2021-01-29';
$start = CarbonImmutable::parse($start_day);

$years = [];
for ($i = 0; $i < 24; $i++) {
    $date = $start->addMonthsNoOverflow($i);

    $years[$date->format("Y")][$date->format("m")]['title'] = $date->format("d n");
}