En comparant des objets de date en Javascript, j'ai trouvé que même la comparaison de 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 comparer l'égalité de ces dates? Je suis intéressé par l'utilisation de l' Date
objet natif de JS et non par des bibliothèques tierces car il n'est pas approprié d'utiliser un JS tiers juste pour comparer les dates.
javascript
Harshana
la source
la source
Réponses:
En effet, dans le second cas, les objets de date réels sont comparés et deux objets ne sont jamais égaux l'un à l'autre. Obligez-les à numéroter:
alert( +startDate2 == +startDate3 ); // true
Si vous souhaitez une conversion plus explicite en nombre, utilisez soit:
alert( startDate2.getTime() == startDate3.getTime() ); // true
ou
alert( Number(startDate2) == Number(startDate3) ); // true
Oh, une référence à la spécification: §11.9.3 L'algorithme de comparaison d'égalité abstraite qui dit fondamentalement lors de la comparaison d'objets,
obj1 == obj2
n'est vrai que s'ils se réfèrent au même objet, sinon le résultat est faux.la source
Date.prototype.getTime
retournera toujours un nombre ...getTime
est probablement la meilleure pour la clarté (et se trouve être la plus rapide dans les navigateurs que j'ai testés).Comparez les dates en utilisant le
getTime()
nombre de millisecondes renvoyé à 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 un
Date
constructeur prenant un nombre explicite d'année / mois / date plutôt que de vous fier à une représentation sous forme 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).la source
Vous n'avez pas besoin d'utiliser la méthode getTime - vous pouvez soustraire un objet date d'un autre objet date. Il renverra la différence en millisecondes (négative, 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)
// évalue à 0 si les dates ont le même horodatage
la source
vous pouvez comparer les millisecondes réelles:
la source
Vous pouvez également utiliser la fonction valueOf ()
var startDate1 = new Date("02/10/2012").valueOf(); var startDate2 = new Date("01/10/2012").valueOf(); var startDate3 = new Date("01/10/2012").valueOf(); alert(startDate1>startDate2); // 1326150000000 > 1328828400000 true alert(startDate2==startDate3); // 1328828400000 > 1326150000000 false
la source