Confronta javascript date
-
16-09-2019 - |
Domanda
sto paragonando date con qualcosa di simile:
var dt = new Date();
dt.setDate("17");
dt.setMonth(06);
dt.setYear("2009");
var date = new Date();
console.log("dt(%s) == date(%s) == (%s)", dt, date, (dt == date) );
if( now == dt ) {
....
}
I valori stringa sono dinamici naturalmente.
Nei registri che vedo:
dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)
Ho provato .equals (), ma non ha funzionato (ho cercato la parte Java di JavaScript: P)
Come posso confrontare queste date così tornano vero?
Soluzione
Il seguente codice dovrebbe risolvere il problema:
(myDate.getTime() == myOtherDate.getTime())
Il problema è che quando si scrive:
(myDate == myOtherDate)
... si sta effettivamente chiedendo "sta puntando myDate
allo stesso oggetto che myOtherDate
sta puntando?", Non "è identica a myDate
myOtherDate
?".
La soluzione è quella di utilizzare getTime
per ottenere un numero che rappresenta l'oggetto Date (e poiché getTime
restituisce il numero di millisecondi da tempo dell'epoca, questo numero sarà un esattamente rappresentazione dell'oggetto Date) e quindi utilizzare questo numero per il confronto (i numeri si confrontano funzioneranno come previsto).
Steve
Altri suggerimenti
Il problema con il vostro codice è che si sta confrontando ora / data parte invece solo la data.
Prova questo codice:
var myDate = new Date();
myDate.setDate(17);
myDate.setMonth(7);
myDate.setYear(2009);
//Delay code - start
var total = 0;
for(var i=0; i<10000;i++)
total += i;
//Delay code - end
var now = new Date();
console.log(now.getTime() == myDate.getTime());
Se si mantiene il codice loop (identificato dal 'codice Delay -start'), console mostrerà 'false' e se si rimuove il codice ciclo, console registrerà 'vero', anche se in entrambi i casi è myDate 2009/07/17 e 'ora' è 2009/07/17.
Il problema è che i negozi JavaScript data oggetto sia data e il tempo . Se si desidera solo per confrontare la parte relativa alla data, è necessario scrivere il codice.
function areDatesEqual(date1, date2)
{
return date1.getFullYear() == date2.getFullYear()
&& date1.getMonth() == date2.getMonth()
&& date1.getDate() == date2.getDate();
}
Questa funzione viene stampato 'vero' se i due javascript 'data di parte' è uguale ignorando la parte di tempo associato.
=> (myDate.getTime() == myOtherDate.getTime())
(myDate == myOtherDate)
non funziona, mette a confronto i due oggetti (puntatori) invece del valore che essi contengono. Utilizzare getTime per ottenere intero rappresentante Data e quindi confrontare.