Разбить месяц на периоды
Задача получить периоды, дни когда образный пользователь работал и когда не работал. Тоесть, имеем месяц
$month = CarbonPeriod::create('2024-02-01', '2024-02-29')
Также данные когда пользователь не работал
$notWorking = [
CarbonPeriod::create('2024-02-02', '2024-02-07'),
CarbonPeriod::create('2024-02-12', '2024-02-15')
]
Как получить 3 периода, те когда пользователь работал, имея данные когда он не работал
$work1 = ['start' => '2024-02-01', 'finish' => '2024-02-01']; // один день
$work2 = ['start' => '2024-02-08', 'finish' => '2024-02-11'];
$work2 = ['start' => '2024-02-16', 'finish' => '2024-02-29'];
Ответы (1 шт):
Автор решения: teran
→ Ссылка
Без Carbon желаемый результат достигается достаточно легко
$month = ['2024-02-01', '2024-02-29'];
$notWorking = [
['2024-02-02', '2024-02-07'],
['2024-02-12', '2024-02-15']
];
[$start, $end] = $month;
$result = [$start];
foreach ($notWorking as [$s, $e]) {
$result[] = date('Y-m-d', strtotime("{$s} -1 day"));
$result[] = date("Y-m-d", strtotime("{$e} +1 day"));
}
$result[] = $end;
print_r(array_chunk($result ,2));
Подозреваю, что с Carbon будет еще проще.