JavaScript通过循环数组设置时差
我试图在JavaScript中使用循环将值存储在数组中。 它只适用于我。
我想将时间存储在一个数组中
将有startTime,endTime和间隔
例如:如果想要从9:00到10:00获取时间间隔为15分钟,则应打印
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
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)
的jsfiddle
嗨,我已经创建了一个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/
或者如果您不想打印范围,请参阅下面给出的链接: –
解决了这个问题: http : //jsfiddle.net/w6EQ6/8/
好吧,如果你需要你让你的循环在10:00停止这里是代码
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; }
你可以像这样使用这个function
var diff = difference(array[0],array[1]); //for example
如果您需要在几分钟或一些时间内,此函数将返回以小时为单位的差异,您必须像这样更改diff变量
// 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
这是一个适用于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));
你正在循环一个额外的,下面的代码将解决你的问题
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
问题在于你的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)); };