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