97 votes

Comparaison d'objets JavaScript Date

Lors de la comparaison d'objets date en Javascript, j'ai constaté que même comparer la même date ne retournait pas vrai.

  var startDate1 = new Date("02/10/2012");
 var startDate2 = new Date("01/10/2012");
 var startDate3 = new Date("01/10/2012");
 alert(startDate1>startDate2); // true
 alert(startDate2==startDate3); //false
 

Comment pourrais-je comparer l'égalité de ces dates? Je suis intéressé par l’utilisation de l’objet natif Date de JS et non par une bibliothèque tierce, car il n’est pas approprié d’utiliser un tiers JS uniquement pour comparer les dates.

148voto

RobG Points 41170

C'est parce que dans le deuxième cas, la date réelle objets sont comparés, et les deux objets ne sont jamais égaux les uns aux autres. Pour les forcer à nombre:

 alert( +startDate2 == +startDate3 ); // true

Si vous voulez un plus explicitement la conversion en nombre, utilisez:

 alert( startDate2.getTime() == startDate3.getTime() ); // true

ou

 alert( Number(startDate2) == Number(startDate3) ); // true

Oh, une référence de la spécification: §11.9.3 Le Résumé de l'Égalité de l'Algorithme de Comparaison qui dit en gros lorsque l'on compare les objets, obj1 == obj2 n'est vrai que si ils font référence au même objet, sinon le résultat est faux.

30voto

Tomasz Nurkiewicz Points 140462

Comparez les dates en utilisant getTime() renvoyant le nombre de millisecondes de l'époque (c'est-à-dire un nombre):

 var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var startDate3 = new Date("01/10/2012");
alert(startDate1.getTime() > startDate2.getTime()); // true
alert(startDate2.getTime() == startDate3.getTime()); //true
 

Pensez également à utiliser le constructeur Date prenant explicitement le numéro année / mois / date plutôt que de vous fier à la représentation de chaîne (voir: Date.parse () ). Et rappelez-vous que les dates en JavaScript sont toujours représentées à l'aide du fuseau horaire du client (navigateur).

18voto

kennebec Points 33886

Vous n'avez pas besoin d'utiliser la méthode getTime. Vous pouvez soustraire un objet de date d'un autre objet de date. Il retournera la différence en millisecondes (négatif, si la seconde est une date ultérieure)

 var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");

var diff= (startDate1 -startDate2)
 

// est évalué à 0 si les dates ont le même horodatage

5voto

gion_13 Points 15594

vous pouvez comparer les millisecondes réelles:

 alert(startDate2.getTime() == startDate3.getTime());
 

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