2012-02-15 11 views
5

Jaki jest najprostszy sposób porównania dwóch dat z pominięciem znaczników czasu. Mam dwie daty: firstDate pochodzące z bazy danych (przekształcone na datę javascript) i secondDate pochodzące z pola wprowadzania danych próbnika dat.
Przede moim algorytmie te dwa terminy są równe, ponieważ nie bierze pod uwagę timestamp ale kod nie rozpatrzy ona równa jak firstDate ma 01:00:00 w nim.
Jak całkowicie odrzucić znacznik czasu w celu porównania?Porównywanie daty JavaScript ignorowanie wartości datownika

firstDate:

czw 24 marca 1992 01:00:00 GMT-0500 (Central Daylight Time)

secondDate:

Wto 24 marca 1992 00:00:00 GMT-0500 (centralny czas letni)

Kod:

if(firstDate < secondDate) { 

     alert("This alert shouldn't pop out as dates are equal"); 
    } 

Odpowiedz

5

Można użyć toDateString aby pozbyć się raz, że i przypisanie do firstDate i zmiennych secondDate. Może być lepszy sposób, ale to mi się przyszło do głowy.

firstDate = new Date(firstDate.toDateString()); 
secondDate = new Date(secondDate.toDateString()); 
if(firstDate < secondDate){ 
    alert("This alert shouldn't pop out as dates are equal"); 
} 

Ponadto, będziemy chcieli, aby upewnić się, że porównanie wartości dat, nie sprawdzając, czy są one ten sam przedmiot, jeśli porównać, czy są one równe. Więc coś w stylu.

firstDate.valueOf() == secondDate.valueOf() 

Możesz również sprawdzić mój JSFiddle example.

+0

Derek dziękuję za odpowiedź. Miałem takie samo rozwiązanie, zastanawiając się, czy istnieje inny sposób. Jeśli żadne inne ciało nie odpowiedziało, przyjmuję twoją odpowiedź. – user1195192

0

Odpowiedź Derek jest poprawna. Alternatywną metodą bez tworzenia nowych instancji daty jest tworzenie ciągów daty RFC3339.

var firstDateStr = firstDate.toISOString().slice(0, 10); 
var secondDateStr = secondDate.toISOString().slice(0, 10); 

return (firstDateStr < secondDateStr); 
+0

W moim przykładzie, nie porównuję łańcuchów, ale raczej 'new Date()' zainicjalizowany z wynikiem 'toDateString()' – derekaug

+0

Ah rzeczywiście. Błędne, przepraszam. Edytowanie odpowiedzi. – Deestan

3

Użyj funkcji Date.setHours(hrs, mins, secs, ms) ze wszystkimi zera argumentów, aby ustawić porę dnia do północy w obu terminach (wykonać kopię, jeśli potrzebujesz datę z czasem do innych celów).

Powiązane problemy