web-dev-qa-db-fra.com

Comment calculer le nombre de jours entre deux dates?

  1. Je calcule le nombre de jours entre les dates "de" et "à". Par exemple, si la date de début est le 13/04/2010 et que la date de fin est le 15/04/2010, le résultat doit être

  2. Comment puis-je obtenir le résultat en utilisant JavaScript?

252
udaya
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)));
491
MaxVT

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

}
42
Darin Dimitrov

Voici ce que j'utilise. Si vous vous contentez de soustraire les dates, cela ne fonctionnera pas dans la limite d'heure (par exemple, du 1er au 30 avril ou du 1er au 31 octobre). Cela supprime toutes les heures pour vous assurer de recevoir une journée et élimine tout problème d'heure d'été en utilisant l'UTC.

var nDays = (    Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
                 Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;

en tant que fonction:

function DaysBetween(StartDate, EndDate) {
  // The number of milliseconds in all UTC days (no DST)
  const oneDay = 1000 * 60 * 60 * 24;

  // A day in UTC always lasts 24 hours (unlike in other time formats)
  const start = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
  const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());

  // so it's safe to divide by 24 hours
  return (start - end) / oneDay;
}
16
rmcmullan

Voici ma mise en œuvre:

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

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

11
Andrei Borisovich

Ajusté pour tenir compte des différences de l'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;
}
10
Damen TheSifter

J'ai écrit cette solution pour un autre poste qui demandait comment calculer la différence entre deux dates, alors 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 ignorer certaines étapes du code, je l'ai écrit pour le rendre facile à comprendre.

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

7
Armin

De mon petit calculateur de différence de date:

var startDate = new Date(2000, 1-1, 1);  // 2000-01-01
var endDate =   new Date();              // Today

// Calculate the difference of two dates in total days
function diffDays(d1, d2)
{
  var ndays;
  var tv1 = d1.valueOf();  // msec since 1970
  var tv2 = d2.valueOf();

  ndays = (tv2 - tv1) / 1000 / 86400;
  ndays = Math.round(ndays - 0.5);
  return ndays;
}

Donc, vous appelez:

var nDays = diffDays(startDate, endDate);

(Source complète sur http://david.tribble.com/src/javascript/jstimespan.html .)

Addendum

Le code peut être amélioré en modifiant ces lignes:

  var tv1 = d1.getTime();  // msec since 1970
  var tv2 = d2.getTime();
0
David R Tribble