Проверьте, указано ли указанное время в увеличенном времени - PullRequest
0 голосов
/ 23 апреля 2019

Вот некоторые переменные, которые у меня есть:

start time: 10:45
interval time: 5 (in minutes)
specific time: 14:20

Мне нужно выяснить, попадает ли конкретное время точно в любое время, увеличенное с момента старта.

ДляНапример, интервал времени равен 5.

10:45 incremented by interval time
11:00
11:05
11:10
...
14:20 << specific time found

if(specificTime is mentioned in any of the incremented times) {
    console.log('Found it!');
} else {
    console.log('Not found');
}

Но это сложно, когда время запуска равно 10:48, а интервал составляет 5 минут.Потому что:

10:48
10:53
10:58
11:03
11:08
...

и 14:20 здесь не упоминаются, поэтому в нем будет записано «Не найдено».

Как узнать, упоминается ли конкретное время ввремя приращения от времени начала?

Интервал не всегда будет равен 5, а другие переменные также будут динамическими.

Я НЕ , ищущий использование циклов,Должна быть формула или функция, которая может помочь мне достичь этого.Спасибо!

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Я думаю, что вы можете рассчитать, если возможно выполнить беспокойное деление разницы между временем начала и заданным временем и интервалом.

В зависимости от масштаба ваших временных интервалов, вы можете рассчитатьэто в часах, минутах, секундах, миллисекундах или в любом масштабе.Так как ваши примеры работают за считанные минуты, фрагмент кода также делает.

Обратите внимание, что в этом фрагменте предполагается, что оба времени относятся к одному и тому же дню (00:00 - 24:00), и что конкретное время позднее в этом дне, чем время начала.Я дам вам разобраться с остальными:)

function toMinutes(hours, minutes) {
  return (hours * 60) + minutes;
}

const startTime = toMinutes(10, 45);
const specificTime = toMinutes(14, 20);
const interval = toMinutes(0, 5);

const difference = specificTime - startTime;

if (difference % interval === 0) {
  console.info('Found it!');
  console.info('Minutes:', difference);
  console.info('Intervals:', difference / interval);
} else {
  console.error('Not found');
}
0 голосов
/ 23 апреля 2019

Это работает следующим образом:
- Преобразование строк времени в числовые минуты (с countOfMinutes())
- Вычитание startTime из specificTime (и корректировка при увеличении после 12:00)
- деление результата на minsPerIncrement и проверка, равен ли остаток нулю

// The big payoff -- calculates whether we exactly hit `specificTime`
function isExact(start, specific, increment){
  let difference = countOfMinutes(specific) - countOfMinutes(start);
  if(difference <= 0){ difference += 12 * 60; } // Add 12 hours if necessary
  return difference % increment == 0;
}

// The converter -- because numbers are easier to divide than strings
function countOfMinutes(timeString){
  const hours = timeString.slice(0, timeString.indexOf(":"));
  const mins = timeString.slice(timeString.indexOf(":") + 1);
  return hours * 60 + mins;
}

// The results -- some readable output
function report(){
  console.log(`
     Repeatedly adding ${minsPerIncrement} to ${startTime} will eventually yield ${specificTime}?:
     _ ${isExact(startTime, specificTime, minsPerIncrement)} _`);
}

// The pudding -- a couple of test cases
let start, specific, minsPerIncrement;

startTime = "12:30"; specificTime = "3:55"; minsPerIncrement = 21;
report();

startTime = "4:20"; specificTime = "11:45"; minsPerIncrement = 5;
report();

startTime = "11:45"; specificTime = "4:20"; minsPerIncrement = 5;
report();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...