以下是我拥有的一些变量:
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,其他变量也是动态的。
我不希望使用循环。必须有一个公式或函数可以帮助我实现这一目标。谢谢!
答案 0 :(得分:1)
我认为您可以计算是否可以对开始时间与指定时间和间隔之间的差异进行不停的除法。
根据时间间隔的大小,您可以用小时,分钟,秒,毫秒或基本上任何刻度来计算。由于您的示例仅需几分钟即可处理,因此代码段也可以。
请注意,此代码段假定两个时间都在同一天(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');
}
答案 1 :(得分:0)
此作品的作者:
-将时间字符串转换为数字分钟(使用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();