Я бы как-то так сделал:
(()=>{
const currentTime=new Date().getTime();//текущее время (unix time)
//Отсортированный список временных интервалов.
//Наименование свойства объекта - число, которое будет возвращено,
//если текущее время попадает в заданный интервал.
//Во вложенных массивах указываются аргументы, которые будут переданы конструктору Date
const ranges={
10:[[1582,9,15],[1700,02,11]],
11:[[1700,02,12],[1800,02,12]]
};
//Поиск только тех интервалов, в которые входит текущее время
return Object.keys(ranges).filter(day=>{
//Приведение границ интервала к типу int
const range=ranges[day].map(
args=>new Date(...args).getTime()
);
//Сравнение текущего времени и границ интервала
return (
currentTime>=range[0] && currentTime<=range[1]
);
}).shift()||0;//Возвращение первого подходящего ключа, либо 0
})();