2013-03-18 13 views
20

Quando creo due oggetti JavaScript identici Date e li compro, sembra che non siano uguali. Come posso testare se due date JavaScript hanno lo stesso valore?Due date JavaScript identiche non sono uguali

var date1 = new Date('Mon Mar 11 2013 00:00:00'); 
var date2 = new Date('Mon Mar 11 2013 00:00:00'); 
console.log(date1 == date2); //false? 

JS Fiddle available here

+0

anche controllare [questo] (http://stackoverflow.com/questions/7244513/javascript-date-comparisons-dont-equal) –

+1

Per vedere se due date sono uguali, si potrebbe fare '+ a == + b' o'! (a - b) ', ma potrebbe essere un po 'offuscato. Non lasciare l'analisi delle stringhe di data casuale al costruttore Date, fornire una stringa conforme agli standard (che non è ancora supportata in modo coerente) o fornire valori per [ECMA-262] (http://www.ecma-international.org/ ECMA-262/5.1/# sec-15.9.3.1). – RobG

risposta

41

Risulta this has been addressed already.

Per verificare se le date sono uguali, essi devono essere convertiti nei loro primitive:

date1.getTime()=== date2.getTime() 
//true 
19

Prima di tutto, si stanno facendo un errore suono qui di paragonare i riferimenti. Date un'occhiata a questo:

var x = {a:1}; 
var y = {a:1}; 

// Looks like the same example huh! 
alert (x == y); // It says false 

Qui, anche se gli oggetti sembrano identici ma contengono diversi slot in memoria. Riferimento memorizza solo l'indirizzo dell'oggetto. Quindi entrambi i riferimenti sono diversi.

Quindi ora dobbiamo confrontare i valori poiché sai che il confronto dei riferimenti non funzionerà qui. Si può solo fare

if (date1 - date2 == 0) { 
    // Yep! Dates are equal 
} else { 
    // Handle different dates 
} 
+2

Buona risposta - soprattutto perché trovo date.GetTime() fuorviante (suggerisce che avrà il tempo per me (anche se so che non c'è un oggetto del tempo)) –

0

paragono molti tipi di valori in un ciclo for, quindi non ero in grado di valutarli sottraendo, invece ho coverted valori di stringa prima di confrontare

var a = [string1, date1, number1] 
var b = [string2, date2, number2] 
for (var i in a){ 
    if(a.toString() == b.toString()){ 
    // some code here 
    } 
} 
Problemi correlati