我正在尝试一种基于开始时间,结束时间和持续时间(以分钟为单位)获取一系列时间的方法。
例如:开始时间:9结束时间:17持续时间:15
我成功地通过在开始和结束时间上进行循环来完成此操作,然后在该循环内进行了循环以计算分钟。
function getTimesArray(start, end, length) {
var time_array = [];
var duration = length / 60;
var count = 0;
for (var i = start, len = end; i < len; i++) {
var minutes = 1 / duration;
for (var b = 0, leng = minutes; b < leng; b++) {
var min = length * b;
time_array[count] = i + ':' + (min == 0 ? "00" : min);
count ++;
}
}
time_array[time_array.length+1] = i + ':' + "00";
return time_array;
}
https://jsfiddle.net/wvtpqx8c/
问题在于,您最多只能输入60分钟的持续时间,因为它总是在小时内循环播放。
我需要的是无论长度有多少分钟都能够计算时间。例如,如果长度为120,则应从开始到结束每2小时显示一次。
如果您以分钟为单位考虑所有内容,并在制作字符串时计算小时:分钟,这会容易一些。这将使您可以使用简单的while
循环,而不是带有条件的复杂的for
循环。然后,您可以将分钟数添加到开始时间,并在大于或等于结束时间时结束:
function getTimesArray(start, end, length) {
let startMin = start * 60
let endMin = end * 60
let times = []
while (startMin <= endMin){
let mins = startMin % 60
let hours = Math.floor(startMin / 60)
let timeString = hours.toString() + ":" + mins.toString().padStart(2, '0')
times.push(timeString)
startMin += length
}
return times
}
console.log(getTimesArray(1,6, 12))
console.log(getTimesArray(4,8, 110))
如果持续时间超过上述第二个示例,则不包括结尾,因为这会增加与长度不同的持续时间。如果需要的话,再拖多一点时间将是一件简单的事情。