835 votes

Obtenez de différence entre 2 dates en javascript?

Comment puis-je obtenir la différence entre 2 dates en jours pleins (je ne veux pas de fractions de jour)

var date1 = new Date('7/11/2010');
var date2 = new Date('12/12/2010');
var diffDays = date2.getDate() - date1.getDate(); 
alert(diffDays)

J'ai essayé ci-dessus mais cela ne fonctionne pas.

1253voto

TNi Points 2766

En voici une:

var date1 = new Date("7/11/2010");
var date2 = new Date("12/12/2010");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays)​;

Observer que nous devons joindre la date dans le devis. Le reste du code de la différence de temps en millisecondes et se divise alors pour obtenir le nombre de jours.

1003voto

Shyam Habarakada Points 2360

La plupart de ces solutions ignorer un cas qui échoue lorsque les deux dates, allez dans une heure d'été de changer. Dans ce cas, la date d'heure d'été et changement se produit aura une durée en millisecondes, ce qui != 1000*60*60*24, ainsi, le calcul type échouera.

D'une façon plus précise pour obtenir le nombre de jours entre deux javascript dates peuvent être écrites comme suit:

var _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
  // Discard the time and time-zone information.
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

Cela fonctionne parce que l'heure UTC jamais observe l'heure d'été. Voir N'est UTC observer l'heure d'été?

128voto

Matt Johnson Points 33433

Voici une solution à l'aide de moment.js:

var a = moment('7/11/2010','M/D/YYYY');
var b = moment('12/12/2010','M/D/YYYY');
var diffDays = b.diff(a, 'days');
alert(diffDays);

J'ai utilisé les originaux de vos valeurs d'entrée, mais vous n'avez pas spécifié le format donc j'ai supposé que la première valeur est le 11 juillet. Si il était destiné à être le 7 novembre, puis réglez le format d' D/M/YYYY à la place.

58voto

volkan er Points 386
var date1 = new Date("7/11/2010");
var date2 = new Date("8/11/2010");
var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24)); 

alert(diffDays )

4voto

Christian Points 12142

Vous ne pouvez pas faire la différence entre deux objets. Pour faire ce que vous voulez, vous avez besoin pour obtenir un horodatage via Date().getTime();

getDate() retourne une chaîne formatée, et il ne fait pas de sens pour diminuer une chaîne de caractères en une chaîne de caractères.

Donc, votre code devrait ressembler à:

var date1 = new Date('7/11/2010');
var date2 = new Date('12/12/2010');
var diffDays = date2.getTime() - date1.getTime(); 
alert(diffDays);

Edit: TNi code devrait fonctionner comme un charme. Je suis marre à ce clavier de course...

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