我有一个带时间的数组,其中第一个数字是小时,第二个数字是分钟。还有一个时间间隔(以分钟为单位),开始时间和结束时间。例如:
var time = [14, 35];
var interval = 40; // in minutes
var startTime = [10, 40];
var endTime = [16, 20];
它将从startTime
开始并增加interval
40分钟。
[10, 40]
[11, 20]
[12, 0]
[12, 40]
[13, 20]
[14, 0]
[14, 40]
...
我怎样才能使它找到恰好在var time
之前的时间? (请注意,startTime
,endTime
,interval
和time
都是动态的。
在此示例中,最后的result
应该是[14, 0]
。
另一个示例,如果time
是[13, 20]
,则最后的result
应该是[12, 40]
。
感谢所有帮助!
答案 0 :(得分:1)
首先,您需要将日期和时间用作DATE
在下面,您必须确保:
startTime <= endTime
还有
startTime <= time <= endTime
$(function(){
let
time = [14, 35],
interval = 45, // in minutes
startTime = [10, 40],
endTime = [16, 20],
markTime = true;
time = new Date('2000-01-01 ' + time[0] + ':' + time[1] + ':00');
startTime = new Date('2000-01-01 ' + startTime[0] + ':' + startTime[1] + ':00');
endTime = new Date('2000-01-01 ' + endTime[0] + ':' + endTime[1] + ':00');
while (startTime <= endTime) {
let nextTime = new Date(startTime.getTime() + interval*60000);
if (nextTime > time && markTime) {
$("#divTimes").append('<b>' + startTime.getHours() + ':' + startTime.getMinutes() + ' <<</b><br/>');
markTime = false;
} else {
$("#divTimes").append(startTime.getHours() + ':' + startTime.getMinutes() + '<br/>');
}
startTime = new Date(startTime.getTime() + interval*60000)
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="divTimes">
</div>
答案 1 :(得分:1)
尝试一下:
var time = [14, 35],
interval = 45, // in minutes
startTime = [10, 40],
endTime = [16, 20];
var a=startTime[0]*60+startTime[0],
out=a,
findTime=time[0]*60+time[0],
endMins=endTime[0]*60+endTime[0];
while(a<findTime && a<endMins){
out=a;
a+=interval;
}
console.log(Math.floor(out/60),out%60);
答案 2 :(得分:1)
在这里,您有一种可能适合您的递归方法。请注意,我们正在getTimeBefore()
方法接收的参数上使用destructuring。
const getTimeBefore = ([startH, startM], [endH, endM], ival, [checkH, checkM]) =>
{
let [newH, newM] = [startH + Math.floor((startM + ival) / 60), (startM + ival) % 60];
if (newH >= checkH && newM >= checkM)
return [startH, startM];
else if (newH >= endH && newM >= endM)
return "Not Found" // Or anything you need;
else
return getTimeBefore([newH, newM], [endH, endM], ival, [checkH, checkM]);
}
console.log("Time before 14:35 is:", getTimeBefore([10,40], [16,20], 40, [14,35]));
console.log("Time before 13:20 is:", getTimeBefore([10,40], [16,20], 40, [13,20]));
console.log("Time before 19:05 is:", getTimeBefore([10,40], [16,20], 40, [19,05]));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}