Не думаю, что вы можете получить дату начала / окончания каждого периода, но вы можете использовать копию / установщик, чтобы получить следующий день конца периода.
$period = CarbonPeriod::create('2019-10-01', '30 days', '2020-02-15');
$start = null;
foreach($period as $key=>$date) {
if(!$start) {
echo "Start 1 : ".$period->getStartDate()->toDateString(). " End : ".$date->toDateString()."\n";
$start = $date->copy()->addDay();
} else {
echo "Start 2 : ".$start->toDateString(). " End : ".$date->toDateString()."\n";
}
$start = $date->copy()->addDay();
}
if($start->lt($period->getEndDate())) {
echo "Start : ".$start->toDateString(). " End : ".$period->getEndDate()->toDateString()."\n";
}
//Start : 2019-10-01 End : 2019-10-01
//Start : 2019-10-02 End : 2019-10-31
//Start : 2019-11-01 End : 2019-11-30
//Start : 2019-12-01 End : 2019-12-30
//Start : 2019-12-31 End : 2020-01-29
//Start : 2020-01-30 End : 2020-02-15
С 2020- 01-30 - 2020-02-15 - это не 30 дней, это не интервал. Вы должны вручную проверить это, добавить его, как в последних нескольких строках, если хотите.