Суть задачи в объединении пересечающихся интервалов, по сути достаточно взять два массива диапазонов, объединить их, отсортировать по возрастанию по начальной дате и пробежаться циклом сравнивая конец текущего с началом следующего, если больше, то объединить.
Напишу схематично:
var data = concat(array1, array2).sort(e => e.startTime);
for (var i = 0; i < data.length-1;)
{
if (data[i].endTime >= data[i+1].startTime)
{
data[i].endTime = max(data[i].endTime, data[i+1].endTime);
remove(data[i+1]);
}
else
i++;
}