179 votes

Boucle Javascript entre des plages de dates

Étant donné deux objets Date(), dont l'un est inférieur à l'autre, comment puis-je boucler tous les jours entre les dates ?

for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{

}

Cette sorte de boucle fonctionnerait-elle ? Mais comment puis-je ajouter un jour au compteur de la boucle ?

Gracias.

285voto

David Johnstone Points 10565

Voici une façon de le faire en utilisant la façon dont l'ajout d'un jour fait passer la date au mois suivant si nécessaire, et sans s'embêter avec les millisecondes. L'heure d'été ne pose pas de problème non plus.

var now = new Date(Date.now());
var daysOfYear = [];
for (var d = new Date(2012, 0, 1); d <= now; d.setDate(d.getDate() + 1)) {
    daysOfYear.push(new Date(d));
}

Notez que si vous voulez stocker la date, vous devrez en créer une nouvelle (comme ci-dessus avec new Date(d) ), sinon vous vous retrouverez avec chaque date stockée qui sera la valeur finale de la fonction d dans la boucle.

91voto

Tabares Points 565

Basé sur la réponse de Tom Gullen.

    var start = new Date("02/05/2013");
    var end = new Date("02/10/2013");

    while(start < end){
       alert(start);           

       var newDate = start.setDate(start.getDate() + 1);
       start = new Date(newDate);
    }

Meilleures salutations.

11voto

jayarjo Points 2858

Si startDate et endDate sont effectivement des objets de type date, vous pouvez les convertir en nombre de millisecondes depuis minuit le 1er janvier 1970, comme ceci :

var startTime = startDate.getTime(), endTime = endDate.getTime();

Vous pourriez alors passer de l'un à l'autre en incrémentant loopTime de 86400000 (1000*60*60*24) - nombre de millisecondes en un jour :

for(loopTime = startTime; loopTime < endTime; loopTime += 86400000)
{
    var loopDay=new Date(loopTime)
    //use loopDay as you wish
}

-2voto

Tom Gullen Points 20826

Basé sur la réponse de Jayarjo :

var loopDate = new Date();
loopDate.setTime(datFrom.valueOf());

while (loopDate.valueOf() < datTo.valueOf() + 86400000) {

    alert(loopDay);

    loopDate.setTime(loopDate.valueOf() + 86400000);
}

-2voto

Ankit Patel Points 1

Une meilleure solution consiste à convertir la date en un type de données numérique, puis à utiliser une boucle for avec un incrément de 86400000.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X