CARBON 使用工作日数获取日期范围之间的所有日期
CARBON Get all dates between date range using number of the weekday
我有一个指示工作日编号的数组,例如这个数组:
[1, 3, 5]
表示星期一、星期三和星期五,给定一个日期范围,如何获取该范围内所有星期一、星期三和星期五的日期。
我正在使用 Laravel 和 Carbon。
检查此代码:
function weekDaysBetween($requiredDays, $start, $end){
$startTime = Carbon::createFromFormat('d-m-Y', $start);
$endTime = Carbon::createFromFormat('d-m-Y', $end);
$result = [];
while ($startTime->lt($endTime)) {
if(in_array($startTime->dayOfWeek, $requiredDays)){
array_push($result, $startTime->copy());
}
$startTime->addDay();
}
return $result;
}
你可以这样称呼它:
weekDaysBetween([1,2, 3], "01-09-2021", "01-10-2021")
结果会是这样的:
[
"2021-09-01T22:02:21.000000Z",
"2021-09-06T22:02:21.000000Z",
"2021-09-07T22:02:21.000000Z",
"2021-09-08T22:02:21.000000Z",
"2021-09-13T22:02:21.000000Z",
"2021-09-14T22:02:21.000000Z",
"2021-09-15T22:02:21.000000Z",
"2021-09-20T22:02:21.000000Z",
"2021-09-21T22:02:21.000000Z",
"2021-09-22T22:02:21.000000Z",
"2021-09-27T22:02:21.000000Z",
"2021-09-28T22:02:21.000000Z",
"2021-09-29T22:02:21.000000Z"
]
您可以使用->daysUntil()->filter()
function weekDaysBetween($requiredDays, $start, $end)
{
return CarbonImmutable::createFromFormat('d-m-Y', $start)
->daysUntil(CarbonImmutable::createFromFormat('d-m-Y', $end))
->filter(static fn (CarbonImmutable $date) => in_array($date->dayOfWeek, $requiredDays, true));
}
我有一个指示工作日编号的数组,例如这个数组:
[1, 3, 5]
表示星期一、星期三和星期五,给定一个日期范围,如何获取该范围内所有星期一、星期三和星期五的日期。
我正在使用 Laravel 和 Carbon。
检查此代码:
function weekDaysBetween($requiredDays, $start, $end){
$startTime = Carbon::createFromFormat('d-m-Y', $start);
$endTime = Carbon::createFromFormat('d-m-Y', $end);
$result = [];
while ($startTime->lt($endTime)) {
if(in_array($startTime->dayOfWeek, $requiredDays)){
array_push($result, $startTime->copy());
}
$startTime->addDay();
}
return $result;
}
你可以这样称呼它:
weekDaysBetween([1,2, 3], "01-09-2021", "01-10-2021")
结果会是这样的:
[
"2021-09-01T22:02:21.000000Z",
"2021-09-06T22:02:21.000000Z",
"2021-09-07T22:02:21.000000Z",
"2021-09-08T22:02:21.000000Z",
"2021-09-13T22:02:21.000000Z",
"2021-09-14T22:02:21.000000Z",
"2021-09-15T22:02:21.000000Z",
"2021-09-20T22:02:21.000000Z",
"2021-09-21T22:02:21.000000Z",
"2021-09-22T22:02:21.000000Z",
"2021-09-27T22:02:21.000000Z",
"2021-09-28T22:02:21.000000Z",
"2021-09-29T22:02:21.000000Z"
]
您可以使用->daysUntil()->filter()
function weekDaysBetween($requiredDays, $start, $end)
{
return CarbonImmutable::createFromFormat('d-m-Y', $start)
->daysUntil(CarbonImmutable::createFromFormat('d-m-Y', $end))
->filter(static fn (CarbonImmutable $date) => in_array($date->dayOfWeek, $requiredDays, true));
}