Если массив отсортирован - примерно так:
function findEndDate(dates, date, defaultValue = null) {
for(const [start, end] of dates) {
if(end >= date) { // старшая дата
if(start <= date) { // дата внутри диапазона
throw new RangeError(`Дата ${date} внутри диапазона ${start} - ${end}.`);
}
return end;
}
}
return defaultValue;
}
рони, нет смысла преобразовывать дату в Date, имеющийся формат нормально сравнивается как строка.)