Каждый диапазон разбить на массив с днями, потом перебирать первый массив и искать значение во втором. Если есть - создавать третий (между первыми двумя) и перенести значение туда, попутно удаляя значение элемента из обоих массивов.
В конце собрать из каждого диапазона массив в исходном формате, используя первый и последний элемент.
Функция для создания массива с датами из диапазона
$from = new \DateTime('2014-01-01');
$to = new \DateTime('2015-11-01');
$period = new \DatePeriod($from, new \DateInterval('P1D'), $to);
$arrayOfDates = array_map(
function ($item) {
return $item->format('Y-m-d');
},
iterator_to_array($period)
);