Czy ktoś może zasugerować sposób porównania wartości dwóch dat większych niż, mniejszych niż i wcześniejszych przy użyciu JavaScript? Wartości będą pochodzić z pól tekstowych.
javascript
date
datetime
compare
Alex
źródło
źródło
Odpowiedzi:
Obiekt Date będą robić to, co chcesz - konstrukt jeden na każdy dzień, a następnie porównać je za pomocą
>
,<
,<=
lub>=
.==
,!=
,===
, I!==
operatorzy wymaga użyciadate.getTime()
jak wdla jasności, sprawdzanie równości bezpośrednio z obiektami daty nie będzie działać
Sugeruję jednak stosowanie list rozwijanych lub podobnej ograniczonej formy wprowadzania daty zamiast pól tekstowych, aby nie znaleźć się w piekle sprawdzania poprawności danych wejściowych.
źródło
setHours(0,0,0,0)
ten sposób. Eliminuje potrzebę dzwonieniasetMinutes()
itp. Ponadto działa szybciej.toString()
metody w obu terminach, a następnie porównać z==
operatorem? Wydaje się o wiele łatwiejsze niż resetowanie czasu i późniejsze porównywanie, czy są w tym jakieś wady?Najłatwiejszym sposobem porównywania dat w javascript jest najpierw konwersja do obiektu Date, a następnie porównanie tych obiektów date.
Poniżej znajduje się obiekt z trzema funkcjami:
daty. porównaj (a, b)
Zwraca liczbę:
date.inRange (d, początek, koniec)
Zwraca wartość logiczną lub NaN:
date.convert
Używany przez inne funkcje do konwersji danych wejściowych na obiekt daty. Dane wejściowe mogą być
.
źródło
(a > b) - (a < b)
przydaje się do sortowania tablicy datArray.prototype.sort
warunkiem, że wszystkie wartości są poprawnymi datami. Jeśli mogą istnieć niepoprawne daty, polecam użycie czegoś takiegofunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
jest prostszy i zastępuje całą instrukcję return.Porównaj
<
i>
jak zwykle, ale wszystko, co wymaga,=
powinno mieć+
prefiks. Tak jak:Mam nadzieję że to pomoże!
źródło
x.getTime() === y.getTime()
metodę, zarówno czytelną, jak i bardzo szybką, zobacz jsperf+
Operator próbuje przekształcić wyrażenie do liczby.Date.valueOf()
służy do konwersji (który powraca to samo, coDate.getTime()
.<
,<=
,>
I>=
korzystać z tego samego algorytmu ( abstrakcyjny algorytm porównania relacyjny ) za kulisy.Operatorów relacyjnych
<
<=
>
>=
można używać do porównywania dat JavaScript:Jednak operatory równości
==
!=
===
!==
nie mogą być używane do porównywania (wartości) dat, ponieważ :Możesz porównać wartość dat równości za pomocą dowolnej z następujących metod:
Zarówno
Date.getTime()
iDate.valueOf()
zwraca liczbę milisekund od 1 stycznia 1970, 00:00 UTC. ZarównoNumber
funkcja, jak i+
operator jednoargumentowy wywołująvalueOf()
metody za kulisami.źródło
Thursday, 10 Aug 2017
jest niestandardowym formatem i różne przeglądarki mogą go analizować inaczej lub w ogóle go nie analizować. Zobacz uwagi na tematDate.parse
.Zdecydowanie najłatwiejszą metodą jest odjęcie jednej daty od drugiej i porównanie wyniku.
źródło
Porównywanie dat w JavaScript jest dość łatwe ... JavaScript ma wbudowany system porównywania dat dzięki czemu porównanie jest tak łatwe ...
Wykonaj następujące kroki, aby porównać 2 wartości dat, na przykład masz 2 dane wejściowe, z których każde ma wartość Data
String
i możesz je porównać ...1. masz 2 ciągi znaków, które otrzymujesz z wejścia i chcesz je porównać, są one jak poniżej:
2. Należy
Date Object
je porównać jako wartości daty, więc po prostu przekonwertuj je na datę, używającnew Date()
, po prostu ponownie przypisuję je dla uproszczenia wyjaśnień, ale możesz to zrobić tak, jak chcesz:3. Teraz po prostu porównaj je, używając
>
<
>=
<=
źródło
<
,>
,<=
,>=
) są wykorzystywane, data obiekty są przekształcane pierwszy epoki Uniksa (w sekundach), i to działa dobrze. Może to jednak prowadzić do powszechnego błędu polegającego na tym,date1 == date2
że rzeczywiście wprowadzany jest błąd jako nie wartość, ale sprawdzana jest równość instancji. Aby temu zapobiec i sprawdzić równość wartości daty, zadziałałoby to:date1.valueOf() == date2.valueOf()
lub krócejdate1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
iNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Porównaj tylko dzień (ignorując składnik czasu):
Stosowanie:
źródło
jaki format
Jeśli konstruujesz obiekt JavaScript Date , możesz go odjąć, aby uzyskać różnicę w milisekundach (edytuj: lub po prostu porównaj):
źródło
==
wspomnianego wyżej problemu porównania.używasz tego kodu,
A także sprawdź ten link http://www.w3schools.com/js/js_obj_date.asp
źródło
KRÓTKA ODPOWIEDŹ
Oto funkcja, która zwraca {boolean}, jeśli od dateTime> do dateTime Demo w akcji
Wyjaśnienie
jsFiddle
ponieważ teraz masz oba typy datetime w liczbach, możesz je porównać z dowolnymi operacjami porównania
(>, <, =,! =, ==,! ==,> = AND <=)
Następnie
jeśli znasz
C#
niestandardowy ciąg formatu daty i godziny, ta biblioteka powinna zrobić dokładnie to samo i pomóc sformatować datę i godzinę dtmFRM bez względu na to, czy przekazujesz ciąg daty lub formatu uniksowegoStosowanie
PRÓBNY
wszystko, co musisz zrobić, to przekazać dowolny z tych formatów spacyfikowanych w
js
pliku bibliotekiźródło
Prostym sposobem jest
źródło
Uwaga - Porównaj tylko część Data:
Kiedy porównamy dwie daty w javascript. Wymaga to także godzin, minut i sekund. Więc jeśli musimy tylko porównać tylko datę, oto takie podejście:
Teraz:
if date1.valueOf()> date2.valueOf()
będzie działać jak urok.źródło
źródło
a
ib
bycieDate
obiektami, których możesz również używaćreturn a*1 == b*1;
+a == +b
źródło
Aby dodać jeszcze jedną możliwość do wielu istniejących opcji, możesz spróbować:
... co wydaje mi się działać. Oczywiście musisz upewnić się, że obie daty nie są niezdefiniowane ...
W ten sposób możemy zapewnić dokonanie pozytywnego porównania, jeśli oba są również niezdefiniowane, lub ...
... jeśli wolisz, aby nie były równe.
źródło
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
Metoda zwraca 1, jeśli
dateTimeA
jest większa niżdateTimeB
Metoda zwraca 0, jeśli
dateTimeA
jest równadateTimeB
Metoda zwraca -1, jeśli
dateTimeA
jest mniejsza niżdateTimeB
źródło
Date
obiektów.<
lub>
operatorów, gdy chwila już przychodzi z przydatnymi metodami porównywania, takimi jak.isBefore
i.isAfter
, wszystko to jest w dokumentacjiUważaj na strefę czasową
Data javascript nie ma pojęcia strefy czasowej . To chwila (tyka od epoki) z przydatnymi funkcjami do tłumaczenia na i z ciągów w „lokalnej” strefie czasowej. Jeśli chcesz pracować z datami przy użyciu obiektów daty, tak jak wszyscy tutaj robią, chcesz, aby twoje daty reprezentowały północ UTC na początku danej daty. Jest to powszechna i niezbędna konwencja, która pozwala pracować z datami niezależnie od sezonu lub strefy czasowej ich utworzenia. Musisz więc być bardzo czujny, aby zarządzać pojęciem strefy czasowej, szczególnie podczas tworzenia obiektu o północy UTC.
Przez większość czasu będziesz chciał, aby data odzwierciedlała strefę czasową użytkownika. Kliknij, jeśli dzisiaj są twoje urodziny . Użytkownicy w Nowej Zelandii i USA klikają jednocześnie i uzyskują różne daty. W takim przypadku zrób to ...
Czasami międzynarodowa porównywalność przewyższa lokalną dokładność. W takim przypadku zrób to ...
Teraz możesz bezpośrednio porównać swoje obiekty daty, jak sugerują inne odpowiedzi.
Mając na uwadze zarządzanie strefą czasową podczas tworzenia, musisz także zachować strefę czasową podczas konwersji z powrotem do reprezentacji ciągu. Możesz więc bezpiecznie używać ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
I całkowicie unikaj wszystkiego innego, zwłaszcza ...
getYear()
,getMonth()
,getDate()
źródło
Załóżmy, że masz obiekty daty A i B, uzyskaj ich wartość EPOC, a następnie odejmij, aby uzyskać różnicę w milisekundach.
To wszystko.
źródło
Aby porównać dwie daty, możemy użyć biblioteki JavaScript date.js, którą można znaleźć na stronie : https://code.google.com/archive/p/datejs/downloads
i użyj
Date.compare( Date date1, Date date2 )
metody, a zwróci liczbę, która oznacza następujący wynik:-1 = data1 oznacza datę mniejszą niż 2.
0 = wartości są równe.
1 = data1 jest większa niż data2.
źródło
Odejmij dwie daty, aby uzyskać różnicę w milisekundach, jeśli otrzymasz
0
tę samą datęźródło
Aby utworzyć daty z dowolnego tekstu w JavaScript, musisz go przeanalizować w obiekcie Date ().
Możesz użyć funkcji Date.parse (), która pobiera dowolny tekst, aby przekonwertować go na nową datę, ale jeśli masz kontrolę nad stroną, zaleciłbym zamiast niej użycie pól wyboru HTML lub selektora dat, takiego jak kontrolka kalendarza YUI lub interfejs użytkownika jQuery Wybór daty .
Gdy masz datę, jak zauważyli inni ludzie, możesz użyć prostej arytmetyki, aby odjąć daty i przekształcić ją z powrotem w liczbę dni, dzieląc liczbę (w sekundach) przez liczbę sekund w ciągu dnia (60 * 60 * 24 = 86400).
źródło
źródło
Ulepszona wersja kodu opublikowana przez „some”
stosowanie:
źródło
Jeśli Twój format daty jest następujący, możesz użyć tego kodu:
Sprawdzi, czy
20121121
liczba jest większa,20121103
czy nie.źródło
first == second
lubfirst < second
lubfirst > second
. To jedna z wielu piękności z ISO8601 w porównaniu do MM / DD / RR, DD / MM / RR, RR / DD / MM, DD / RR / MM lub MM / RR / DD.Zwykle przechowuję
Dates
jaktimestamps(Number)
w bazach danych.Kiedy muszę porównać, po prostu porównuję te znaczniki czasu lub
przekonwertuj go na Date Object, a następnie porównaj w
> <
razie potrzeby.Zauważ, że == lub === nie działa poprawnie, chyba że twoje zmienne są odniesieniami do tego samego obiektu Date.
Najpierw przekonwertuj te obiekty Date na datownik (liczbę), a następnie porównaj ich równość.
Data do znacznika czasu
Datownik do daty
źródło
Przed porównaniem
Dates
obiektu spróbuj ustawić obie ich milisekundy na zeroDate.setMilliseconds(0);
.W niektórych przypadkach, gdy
Date
obiekt jest dynamicznie tworzony w javascript, jeśli będziesz go nadal drukowaćDate.getTime()
, zobaczysz zmiany w milisekundach, co zapobiegnie równości obu dat.źródło
Wydajność
Dzisiaj 2020.02.27 wykonuję testy wybranych rozwiązań na Chrome v80.0, Safari v13.0.5 i Firefox 73.0.1 na MacOs High Sierra v10.13.6
Wnioski
d1==d2
(D) id1===d2
(E) są najszybsze dla wszystkich przeglądarekgetTime
(A) jest szybsze niżvalueOf
(B) (oba są średnio szybkie)Detale
Poniżej przedstawione są fragmenty kodu zastosowane w testach wydajności. Test możesz wykonać na swoim urządzeniu TUTAJ
Pokaż fragment kodu
Wyniki dla chrome
źródło
d1==d2
lubd1===d2
jest bezużyteczny w kontekście pytania.Użyj tego kodu, aby porównać datę za pomocą javascript.
Dzięki D.Jeeva
źródło
źródło
Oto, co zrobiłem w jednym z moich projektów,
nazywając to w formularzu onsubmit. mam nadzieję że to pomoże.
źródło