Confronto tra gli oggetti Data JavaScript

Confrontando gli oggetti data in Javascript ho scoperto che anche il confronto con la stessa data non restituisce true.

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 

Come potrei confrontare l’uguaglianza di queste date? Sono interessato a utilizzare l’object Date nativo di JS e non le librerie di terze parti poiché non è appropriato utilizzare un JS di terze parti solo per confrontare le date.

Questo perché nel secondo caso, gli oggetti data effettivi vengono confrontati e due oggetti non sono mai uguali tra loro. Costringili al numero:

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

Se si desidera una conversione più esplicita in numero, utilizzare:

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

o

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

Oh, un riferimento alle specifiche: §11.9.3 L’Algoritmo di Parità di Parità Astratta che dice sostanzialmente quando si confrontano gli oggetti, obj1 == obj2 è vero solo se si riferiscono allo stesso object, altrimenti il ​​risultato è falso.

Confronta le date usando getTime() restituendo il numero di millisecondi di epoca (ovvero un numero):

 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 

Considerare anche l’utilizzo del costruttore di Date prendendo il numero di anno / mese / data esplicito piuttosto che fare affidamento sulla rappresentazione di stringa (vedere: Date.parse () ). E ricorda che le date in JavaScript sono sempre rappresentate utilizzando il fuso orario client (browser).

Non è necessario utilizzare il metodo getTime: è ansible sottrarre un object data da un altro object data. Restituirà la differenza di millisecondi (negativo, se il secondo è una data successiva)

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

// restituisce 0 se le date hanno lo stesso timestamp

puoi confrontare i millisecondi effettivi:

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