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/6/

解决了这个问题: 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)); };