317 votes

Comment calculer le nombre de jours entre deux dates en utilisant JavaScript?

Je calcule le nombre de jours entre les dates de début et de fin. Par exemple, si la date de début est le 13/04/2010 et la date du 15/04/2010, le résultat devrait être 2. Comment puis-je obtenir le résultat en utilisant JavaScript?

655voto

MaxVT Points 5191

Googler "nombre de jours entre deux dates javascript" produit cet excellent extrait (en fait, tous les meilleurs résultats sont pertinents pour votre question):

 var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date(2008,01,12);
var secondDate = new Date(2008,01,22);

var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
 

57voto

Darin Dimitrov Points 528142

Voici une fonction qui fait ceci:

 function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)

    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)

}
 

13voto

Voici ma mise en œuvre:

 function daysBetween(one, another) {
  return Math.round(Math.abs((+one) - (+another))/8.64e7);
}
 

+<date> fait le type de contrainte sur la représentation entière et a le même effet que <date>.getTime() et 8.64e7 est le nombre de millisecondes dans une journée.

11voto

Damen TheSifter Points 454

Ajusté pour tenir compte des différences d'heure d'été. essaye ça:

   function daysBetween(date1, date2) {

 // adjust diff for for daylight savings
 var hoursToAdjust = Math.abs(date1.getTimezoneOffset() /60) - Math.abs(date2.getTimezoneOffset() /60);
 // apply the tz offset
 date2.addHours(hoursToAdjust); 

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)

    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)

}

// you'll want this addHours function too 

Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}
 

9voto

Armin Points 3308

J'ai écrit cette solution pour un autre post qui a demandé comment calculer la différence entre deux dates, donc je partage ce que j'ai préparé:

 // Here are the two dates to compare
var date1 = '2011-12-24';
var date2 = '2012-01-01';

// First we split the values to arrays date1[0] is the year, [1] the month and [2] the day
date1 = date1.split('-');
date2 = date2.split('-');

// Now we convert the array to a Date object, which has several helpful methods
date1 = new Date(date1[0], date1[1], date1[2]);
date2 = new Date(date2[0], date2[1], date2[2]);

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
date1_unixtime = parseInt(date1.getTime() / 1000);
date2_unixtime = parseInt(date2.getTime() / 1000);

// This is the calculated difference in seconds
var timeDifference = date2_unixtime - date1_unixtime;

// in Hours
var timeDifferenceInHours = timeDifference / 60 / 60;

// and finaly, in days :)
var timeDifferenceInDays = timeDifferenceInHours  / 24;

alert(timeDifferenceInDays);
 

Vous pouvez sauter certaines étapes du code, je l'ai écrit pour le rendre facile à comprendre.

Vous trouverez un exemple courant ici: http://jsfiddle.net/matKX/

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