Réglage de JavaScript Différence de temps par Loop In Array

Je tente de stocker des valeurs dans une matrice en utilisant une boucle en JavaScript. Cela ne fonctionne que partiellement pour moi.

Je veux conserver le temps dans un tableau

Il y aura startTime, endTime et un intervalle

Par exemple: si vous souhaitez passer l'heure de 9h00 à 10h00 avec un intervalle de 15 minutes, il devrait imprimer

09: 00,09: 15,09: 30,09: 45,10: 00

Mais c'est l'impression

09: 00,09: 15,09: 30,09: 45,10: 00,10: 15,10: 30,10: 45

Deuxièmement, que dois-je faire si je veux avoir la différence de temps entre 9h30 et 10h30? Ou 9h45 et 10:45?

Voici mon code:

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) 

JsFiddle

Bonjour, j'ai créé un exemple 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; }; 

Cliquez ici pour voir l'exemple: – http://jsfiddle.net/w6EQ6/3/

Ou si vous ne voulez pas imprimer la plage, voir le lien ci-dessous: –

http://jsfiddle.net/w6EQ6/6/

A résolu le problème: http://jsfiddle.net/w6EQ6/8/

Eh bien, si vous avez besoin que vous faites votre arrêt de boucle à 10h00, voici le code

  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; } }; 

Maintenant si vous voulez calculer la différence entre deux dates, voici la fonction

  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; } 

Vous pouvez utiliser cette fonction comme celle-ci

 var diff = difference(array[0],array[1]); //for example 

Cette fonction renvoie la différence en heures si vous avez besoin en quelques minutes ou secondes, vous devez changer la variable diff comme celle-ci

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

Voici un jsFiddle

Voici une réponse qui fonctionne de 9h30 à 10h30 en utilisant l'une des réponses ici:

 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)); 

Vous êtes en train de boucler un extra, le code ci-dessous résoudra votre problème

 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)); 

Et mis à jour jsfiddle

Le problème est avec votre nidification de boucles. Ce qui se passe dans votre code, c'est que la boucle intérieure est exécutée deux fois. Une fois que xh = 9 et une fois lorsque xh = 10. C'est pourquoi vous obtenez plus de fois que vous prévoyez.

Une solution serait de changer

 xh <= endTime 

à

 xh < endTime 

Cela entraînerait à chaque fois jusqu'à la fin du temps en cours d'impression. Pour l'inclure, j'ajouterais une autre ligne pour ajouter le endTime au tableau.

Ainsi, votre boucle finale pourrait ressembler

 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)); };