2012-11-05 13 views
6

Innanzitutto, JavaScript non ha un confronto di date di base come Python potrebbe?JavaScript Node.js Data Comparison and Array ordina per Data

Nel mio script Node.js, ho le seguenti righe:

console.log(Date(2012,11,10) < Date(2012, 11, 9)) 
console.log(Date(2012,11,10) > Date(2012, 11, 9)) 

Tuttavia, entrambi di queste linee di ritorno falsa.

Sembra che ci siano tonnellate di domande su "Data di confronto in JavaScript".

Tuttavia, praticamente per tutti loro qualcuno risponde con la loro soluzione fatta in casa per confrontare le date, alcune delle quali abbastanza lunghe e/o "hacky".

Non esiste davvero alcun modo intrinseco o idiomatico per confrontare semplicemente le date in JavaScript.
Qualche libreria Node lo supporta?

risposta

9

è necessario utilizzare la parola chiave new

console.log(new Date(2012,11,10) < new Date(2012, 11, 9)) 
console.log(new Date(2012,11,10) > new Date(2012, 11, 9)) 

Come Elias Van Ootegem rilevare che è uno standard per restituire una stringa se la parola chiave new viene omesso:

Quando Data viene chiamato come una funzione piuttosto che come costruttore, restituisce una stringa che rappresenta l'ora corrente (UTC).

NOTA
La funzione di chiamata Date(…) non è equivalente alla espressione creazione dell'oggetto new Date(…) gli stessi argomenti.

Fonte: 15.9.2 The Date Constructor Called as a Function

+4

[non solo Chrome 22] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2), è il linguaggio standard per restituire una stringa quando il ' la parola chiave new' viene omessa –

+1

@chrisco Utilizzare 'var before = new Date (...)'. In caso contrario, assegnerà una stringa a 'before' e non a un oggetto data. – andlrc

2

Ho appena incontrato problema confronto data di me stesso, e anche se posso vedere @ risposta di dev-null funziona per le date costruito come new Date(2012,11,10), non sembra lavorare per date analizzata, almeno nel mio caso:

[[email protected]]~$ node -v 
v4.3.2 
[[email protected]]~$ node 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') == new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') < new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') > new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 

L'unico modo che ho trovato per confrontare in modo affidabile oggetti J/S Data sta utilizzando getTime() funzione, e confrontare i risultati di entrambi.

> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() == new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
true 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() < new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() > new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
false