2012-11-05 9 views
6

Po pierwsze, czy JavaScript nie ma podstaw? Porównuje datę w jaki sposób może Python?JavaScript Node.js Porównywanie dat i macierz według daty

W moim scenariuszu node.js, mam następujące wiersze:

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

Jednak zarówno tych linii powrotu fałszywe.

Wygląda na to, że istnieje mnóstwo pytań na temat "Porównanie dat w JavaScript".

Jednak praktycznie dla każdego z nich ktoś odpowiada za pomocą swojego domowego rozwiązania do porównywania dat, niektóre z nich są dość długie i/lub "hacky".

Czy naprawdę nie ma nieodłącznego lub idiomatycznego sposobu porównywania dat w JavaScript?
Czy obsługują ją dowolne biblioteki węzłów?

Odpowiedz

9

Musisz użyć new słowa kluczowego

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

Jak Elias Van Ootegem podkreślić, że jest to norma, aby powrócić ciąg jeśli słowo kluczowe new pominięto:

Kiedy Data nazywany jest jako funkcja raczej niż jako konstruktor, zwraca łańcuch reprezentujący bieżący czas (UTC).

UWAGA
Wywołanie funkcji Date(…) nie jest równoznaczne z wyrażeniem tworzenia obiektów new Date(…) z tymi samymi argumentami.

Źródło: 15.9.2 The Date Constructor Called as a Function

+4

[nie tylko Chrome 22] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2), to średnia język, aby powrócić ciąg gdy ' nowe słowo kluczowe jest pominięte –

+1

@chrisco Użyj 'var before = new Date (...)'. Jeśli nie, przypisze ciąg do 'przed', a nie do obiektu daty. – andlrc

2

Właśnie wpadł porównania data problemu sam, i chociaż widzę @ dev-null za odpowiedź nie działa dla dat skonstruowany jako new Date(2012,11,10), to nie wydaje się pracy w terminach analizowany, przynajmniej w moim przypadku:

[[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 

jedynym sposobem znalazłem wiarygodnie porównać J/S obiektów Date korzysta getTime() funkcję i porównanie wyników z obu.

> 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