Basierend auf Mark Bakers Antwort habe ich diese Funktion geschrieben:
function date_range(Carbon\Carbon $from, Carbon\Carbon $to, $inclusive = true)
{
if ($from->gt($to)) {
return null;
}
$from = $from->copy()->startOfDay();
$to = $to->copy()->startOfDay();
if ($inclusive) {
$to->addDay();
}
$step = Carbon\CarbonInterval::day();
$period = new DatePeriod($from, $step, $to);
$range = [];
foreach ($period as $day) {
$range[] = new Carbon\Carbon($day);
}
return ! empty($range) ? $range : null;
}
Verwendung:
>>> date_range(Carbon::parse('2016-07-21'), Carbon::parse('2016-07-23'));
=> [
Carbon\Carbon {
+"date": "2016-07-21 00:00:00.000000",
+"timezone_type": 3,
+"timezone": "UTC",
},
Carbon\Carbon {
+"date": "2016-07-22 00:00:00.000000",
+"timezone_type": 3,
+"timezone": "UTC",
},
Carbon\Carbon {
+"date": "2016-07-23 00:00:00.000000",
+"timezone_type": 3,
+"timezone": "UTC",
},
]
Sie können auch ein boolesches ( false
) als drittes Argument übergeben, um das Enddatum auszuschließen.
$start_date
,$end_date
am Ende gleich zu sein ? Wenn Sie das Original$start_date
nach dem Aufruf dieser Funktion weiter verwenden möchten , sollten Sie entweder eine Kopie des Originals$start_date
an diese Funktion übergeben oder$date = $start_date -> copy()
die Definition derfor
Schleife festlegen, die ich bevorzugen würde.