我尝试使用JavaScript中的循环将值存储在Array中。它只对我有用。
我想将时间存储在数组中
将有startTime,endTime和间隔
例如: 如果想以9分钟的间隔从9:00到10:00获取时间,则应该打印
09:00,09:15,09:30,09:45,10:00
但它正在打印
09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45
如果我想在9:30到10:30之间获得时差,我该怎么办?还是9:45和10:45?
这是我的代码:
HTML
<div id="time"></div>
的JavaScript
var array = new Array();
var timeDiff = 15;
var FirstTime = 9;
var endTime = 10;
for (var xh = FirstTime; xh <= endTime; xh++) {
for (var xm = 0; xm < 60; xm += timeDiff) {
array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
}
};
$('#time').text(array)
答案 0 :(得分:2)
您好我创建了一个jsfiddle示例: -
var setIntervals = function (start, end, inc) {
start = start.toString().split(':');
end = end.toString().split(':');
inc = parseInt(inc, 10);
var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; },
startHr = parseInt(start[0], 10),
startMin = parseInt(start[1], 10),
endHr = parseInt(end[0], 10),
endMin = parseInt(end[1], 10),
currentHr = startHr,
currentMin = startMin,
previous = currentHr + ':' + pad(currentMin),
current = '',
r = [];
do {
currentMin += inc;
if ((currentMin % 60) === 0 || currentMin > 60) {
currentMin = (currentMin === 60) ? 0 : currentMin - 60;
currentHr += 1;
}
current = currentHr + ':' + pad(currentMin);
r.push(previous + ' - ' + current);
previous = current;
} while (currentHr !== endHr);
return r;
};
点击此处查看示例: - http://jsfiddle.net/w6EQ6/3/
或者如果您不想打印范围,请参阅下面给出的链接: -
答案 1 :(得分:2)
好吧,如果你需要让你的循环在10点停止,这里是代码
var array = new Array();
var timeDiff = 15;
var end = 10;
var start = 9;
for (var xh = start; xh <= end; xh++) {
for (var xm = 0; xm < 60; xm += timeDiff) {
array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
if(xh==end)
break;
}
};
现在如果你想计算两个日期之间的差异就是函数
function difference(date1,date2)
{
date1 = new Date(0,0,0,parseInt(date1.split(":")[0]),parseInt(date1.split(":")[1]));
date2 = new Date(0,0,0,parseInt(date2.split(":")[0]),parseInt(date2.split(":")[1]));
diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60*60);
return diff;
}
你可以像这样使用这个功能
var diff = difference(array[0],array[1]); //for example
如果你需要在几分钟内或者你需要改变差异变量,这个函数会以小时为单位返回差异
// in minutes
diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60);
return diff;
// in seconds
diff = (((date1>date2)?1:-1)*(date1-date2))/1000;
return diff;
这是 jsFiddle
答案 2 :(得分:2)
这是一个适用于9:30到10:30的答案,使用其中一个答案:
function padLeft(value, padding) {
return String(padding + value).slice(-padding.length);
}
function getTimeInterval(start, end, interval) {
var result = [];
var date = new Date();
date.setHours(start.hour);
date.setMinutes(start.minute);
while (!(date.getHours() === end.hour && date.getMinutes() === end.minute + interval)) {
result.push(padLeft(date.getHours(), '00') + ':' + padLeft(date.getMinutes(), '00'));
date = new Date(date.getTime() + interval * 60 * 1000);
}
return result;
}
console.log(getTimeInterval({
hour: 9,
minute: 30
}, {
hour: 10,
minute: 30
}, 15));
答案 3 :(得分:1)
你正在循环一个额外的,下面的代码将解决你的问题
for (var xh = FirstTime; xh < endTime; xh++) {
for (var xm = 0; xm < 60; xm += timeDiff) {
array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
}
};
array.push(("0" + xh).slice(-2)+':' + ("00").slice(-2));
并更新了jsfiddle
答案 4 :(得分:0)
问题在于嵌套for循环。您的代码中发生的是内部循环执行两次。一次xh = 9,一次xh = 10。这就是为什么你得到的次数超出预期。
一个修复就是改变
xh <= endTime
到
xh < endTime
这将导致每次打印endTime。为了使其具有包容性,我将添加另一行来将endTime添加到数组中。
所以你的最终循环可能看起来像
for (var xh = FirstTime; xh < endTime; xh++) {
for (var xm = 0; xm < 60; xm += timeDiff) {
array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
}
array.push(("0" + endTime).slice(-2) + ':' + ("00").slice(-2));
};