protected function chunkTimeslots(Vacancy $vacancy, $step = 30) { $times = []; $startTime = $vacancy->start_at->timezone($vacancy->business->timezone)->toTimeString(); $startKey = date('Y-m-d H:i', strtotime("{$vacancy->date} {$startTime}")) . ' ' . $vacancy->business->timezone; $finishTime = $vacancy->finish_at->timezone($vacancy->business->timezone)->toTimeString(); $endKey = date('Y-m-d H:i', strtotime("{$vacancy->date} {$finishTime}")) . ' ' . $vacancy->business->timezone; $fromTime = Carbon::parse($startKey); $toTime = $fromTime->copy()->addMinutes($step); $limit = Carbon::parse($endKey); while ($fromTime <= $limit) { $key = $fromTime->timezone($vacancy->business->timezone)->format('H:i'); $capacity = $vacancy->getAvailableCapacityBetween($fromTime, $toTime); if ($capacity > 0) { $times[$key] = $capacity; } $toTime->addMinutes($step); $fromTime->addMinutes($step); } return $times; }