Ну во-первых, тебе в любом случае придется подписаться на обновление таймера. Без вариантов. Поэтому первым делом определяешь обработчик для setInterval в 1-5 секунд.
Во-вторых, у тебя есть несколько временных интервалов. Их удобно определить массивами, где первое значение будет являться началом интервала, а второе - его концом.
const range = [Date.now(), Date.now() + 3600 + 12]; // типичный интервал
В-третьих, имея интервалы и обработчик, дело остается за малым. Каждый тик таймера проверяй, не входит ли текущее Date.now() в какой-либо из интервалов. Если входил, обновляй нужные данные, как-то: вешай нужный класс, рассчитывай процент "заполненности" интервала.
В принципе, это все. Алгоритм расписал, дело за реализацией. Удачи.