Podziel przedział czasu na kawałki według innych zakresów czasu

Mam skomplikowane zadanie, które przez kilka dni uderzam głową o ścianę. Wypróbowałem około 4 różnych podejść, jednak każde wydaje się utknąć i staje się niezwykle frustrujące.

Mam przedział czasowy. Na przykład od 14:30 do 18:30. Zastanów się nad tym przedziałem czasowym czyjejś zmiany pracy. W tym przedziale czasowym stwierdzają, że nie mogą pracować od 15:30 do 16:30 i od 17:30 do 18:30. Muszę zmodyfikować czasy początkowe i końcowe oryginalnej zmiany, aby usunąć sprzeczne zmiany.

Oryginalna tablica przesunięć wygląda tak:

$original_shift[0]['start'] = '14:30:00';
$original_shift[0]['end']   = '18:30:00';

Zakresy czasu, które mają zostać usunięte z pierwotnego przesunięcia, wyglądają tak:

$subshift[0]['start'] = '15:30:00';
$subshift[0]['end']   = '16:30:00';
$subshift[1]['start'] = '17:30:00';
$subshift[1]['end']   = '18:30:00';

Oto wizualizacja:

Więc zasadniczo potrzebuję mojej pierwotnej zmiany, aby wyglądać tak, gdy skończę:

$original_shift[0]['start'] = '14:30:00';
$original_shift[0]['end']   = '15:30:00';
$original_shift[1]['start'] = '16:30:00';
$original_shift[1]['end']   = '17:30:00';

Niektóre komplikacje, które również muszę wziąć pod uwagę to:

Te przedziały czasowe mogą być dowolne (nie ograniczone do pół godziny, tak jak w moim przykładzie), jednakże będę wiedział ze 100% pewnością, że niedostępne zakresy czasowe zawsze będą się rozpoczynać i kończyć między początkiem początkowej zmiany a początkiem czasy końcowe.

Czasy niedostępne mogą zwiększać i / lub wydłużać czas całej pierwotnej zmiany.

Nie szukam kogoś, kto „napisałby mój kod” tak bardzo, jak szukam kogoś, kto zajmował się czymś takim w przeszłości i może mieć pewien wgląd w to, jak to osiągnęli.

questionAnswers(3)

yourAnswerToTheQuestion