Как рассчитать количество времени, оставшееся до определенного часа?

Как можно улучшить механизм определения времени до следующего часа для случая, когда локальное время не входит в рабочий часовой промежуток?
  • 18 февраля 2024 г. 19:18
Ответы на вопрос 2
Для расчета времени, оставшегося до определенного часа, можно воспользоваться следующим способом: 
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);
}

Похожие вопросы