Как можно улучшить механизм определения времени до следующего часа для случая, когда локальное время не входит в рабочий часовой промежуток?
Для расчета времени, оставшегося до определенного часа, можно воспользоваться следующим способом: 1. Получить текущее время. 2. Определить час, до которого нужно рассчитать время. 3. Вычислить разницу между текущим часом и заданным часом. 4. Если текущий час больше заданного, значит оставшееся время до следующего заданного часа - это разница между текущим часом и 24 часами плюс заданный час. В противном случае это просто разница между заданным часом и текущим. Для того чтобы улучшить механизм определения времени до следующего часа в случае, когда локальное время не входит в рабочий часовой промежуток, можно использовать условные операторы или циклы. Например, можно добавить проверку, чтобы определить, входит ли текущее время в рабочий часовой промежуток, и если нет, то задать ближайший крайний часовой промежуток (например, начало следующего рабочего дня). Также можно уточнить условия и определить более точный алгоритм для решения данной задачи.
Можно прибавлять 24 часа там, где что-то меньше чего-то..
Примерно так, наскоро. Подробно не проверял:function workHours(on, off, testNow = null) { // TODO: validate input const now = testNow ?? new Date().getHours(); const a = Number(on); let b = Number(off); const format = (status, nextTime) => ({ status, next_time: nextTime }); if (a === b) { return format(true, 0); } if (a > b) { b += 24; } if (now >= a && now < b) { return format(true, 0); } if (now < a) { return format(false, a - now); } return format(false, a + 24 - now); }