Насколько я понимаю, вам нужно проверить все диапазоны на пересечения с другими диапазонами.
1. Берете первую пару дат, проверяете попадает ли from между какими-то другими парами from-to.
a. Если попала - вы нашли пересечение. берете минимальное из обоих from, максимальное из обоих to, вносите в первый диапазон, удаляете тот совпавший, повторяете проверку пересечения.
b. Потом то-же самое для даты to.
2. То-же самое с остальными оставшимися диапазонами.
В итоге у вас останутся только непересекающиеся, а их вы и так нормально выводите.