Как проверить вхождение диапазона дат в определенный диапазон?
Два временных интервала не пересекаются, если начало и конец одного из них раньше начала второго. Элементарное условие.

ассоциативный массив, где ключи даты, значения обозначают начало это или конец интервала.
отсортировать по ключам
двигаться слева направо, следить чтобы не было два начала подряд.
