Разделить временной диапазон на части по другим временным диапазонам

У меня сложное задание, которое я бью головой о стену уже несколько дней. Я'Мы пробовали около 4 различных подходов, однако каждый из них, кажется, останавливается, и это становится чрезвычайно разочаровывающим.

У меня есть временной диапазон. Например, с 14:30:00 до 18:30:00. Рассмотрим этот временной интервалСмена работы. В течение этого промежутка времени они заявляют, что не могут работать с 15:30:00 до 16:30:00 и с 17:30:00 до 18:30:00. Мне нужно изменить оригинальный сдвиг "s время начала и окончания, чтобы удалить конфликтующие сдвиги.

Исходный массив сдвига выглядит так:

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

И временные диапазоны, которые будут удалены из исходного сдвига, выглядят так:

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

Вот визуализация:

Итак, мне нужно, чтобы мой оригинальный сдвиг выглядел так, когда ям сделано:

$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';

Некоторые сложности, которые я также должен учитывать:

Эти временные диапазоны могут быть любыми (не ограничиваясь получасом, как я использовал в моем примере), однако я буду знать со 100% -ной уверенностью, что недоступные временные диапазоны всегда начинаются и заканчиваются в или между первоначальным сдвигом 'время начала и окончания.

Недоступное время может встать на ноги и / или занять всю первоначальную смену.Время вышло. Я

я не ищу кого-тонапиши мой код Столько, сколько я ищу кого-то, кто имел дело с чем-то подобным в прошлом и может иметь некоторое представление о том, как они достигли этого.

Ответы на вопрос(3)

Ваш ответ на вопрос