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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top