Kann jemand eine Möglichkeit vorschlagen, die Werte von zwei Daten, die größer, kleiner als und nicht in der Vergangenheit sind, mit JavaScript zu vergleichen? Die Werte stammen aus Textfeldern.
javascript
date
datetime
compare
Alex
quelle
quelle
Antworten:
Das Date - Objekt wird tun , was Sie wollen - Konstrukt eine für jeden Tag, dann vergleichen sie die Verwendung von
>
,<
,<=
oder>=
.Die
==
,!=
,===
und!==
Betreiber benötigen Sie zu verwenden ,date.getTime()
wie inUm klar zu sein, funktioniert es nicht, nur direkt mit den Datumsobjekten auf Gleichheit zu prüfen
Ich schlage vor, dass Sie Dropdown-Listen oder eine ähnliche eingeschränkte Form der Datumseingabe anstelle von Textfeldern verwenden, damit Sie sich nicht in der Hölle der Eingabevalidierung befinden.
quelle
setHours(0,0,0,0)
diesen Weg zu nennen. Beseitigt die Notwendigkeit für AnrufesetMinutes()
usw. Wird auch schneller ausgeführt.toString()
Methode an beiden Daten anwenden und dann mit dem==
Bediener vergleichen ? Scheint viel einfacher als das Zurücksetzen der Zeit und das anschließende Vergleichen. Gibt es dafür Nachteile?Der einfachste Weg, Daten in Javascript zu vergleichen, besteht darin, sie zuerst in ein Datumsobjekt zu konvertieren und dann diese Datumsobjekte zu vergleichen.
Unten finden Sie ein Objekt mit drei Funktionen:
Daten.Vergleich (a, b)
Gibt eine Nummer zurück:
date.inRange (d, start, end)
Gibt einen Booleschen Wert oder NaN zurück:
date.convert
Wird von den anderen Funktionen verwendet, um ihre Eingabe in ein Datumsobjekt zu konvertieren. Die Eingabe kann sein
.
quelle
(a > b) - (a < b)
ist nützlich zum Sortieren vonArray.prototype.sort
werden, solange alle Werte gültige Daten sind. Wenn es ungültige Daten geben könnte, empfehle ich die Verwendung vonfunction ( 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
einfacher und ersetzt die gesamte return-Anweisung.Vergleichen
<
und>
wie gewohnt, aber alles, was dazu gehört,=
sollte ein+
Präfix verwenden. Wie so:Hoffe das hilft!
quelle
x.getTime() === y.getTime()
Methode, sowohl lesbar als auch extrem schnell siehe jsperf+
Operator versucht, den Ausdruck in eine Zahl umzuwandeln.Date.valueOf()
wird für die Konvertierung verwendet (die das gleiche zurückgibt wieDate.getTime()
.<
,<=
,>
Und>=
verwendet den gleichen Algorithmus ( abstrakter relationaler Vergleichsalgorithmus ) hinter den Kulissen.Mit
<
<=
>
>=
den Vergleichsoperatoren können JavaScript-Daten verglichen werden:Die Gleichheitsoperatoren
==
!=
===
!==
können jedoch nicht zum Vergleichen (des Werts von) Daten verwendet werden, weil :Sie können den Wert von Daten für die Gleichheit mit einer der folgenden Methoden vergleichen:
Beides
Date.getTime()
undDate.valueOf()
geben die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00 UTC zurück. Sowohl dieNumber
Funktion als auch der unäre+
Operator rufen dievalueOf()
Methoden hinter den Kulissen auf.quelle
Thursday, 10 Aug 2017
ist ein nicht standardmäßiges Format, und verschiedene Browser analysieren es möglicherweise anders oder gar nicht. Siehe Anmerkungen zuDate.parse
.Die mit Abstand einfachste Methode besteht darin, ein Datum vom anderen zu subtrahieren und das Ergebnis zu vergleichen.
quelle
Das Vergleichen von Daten in JavaScript ist ganz einfach ... JavaScript verfügt über ein integriertes Vergleichssystem für Daten, das den Vergleich so einfach macht ...
Befolgen Sie einfach diese Schritte, um 2 Datumswerte
String
zu vergleichen. Sie haben beispielsweise 2 Eingaben, in denen jeweils ein Datumswert enthalten ist, und Sie können sie vergleichen ...1. Sie haben 2 Zeichenfolgenwerte, die Sie von einer Eingabe erhalten, und Sie möchten sie vergleichen. Diese sind wie folgt:
2. Sie müssen
Date Object
als Datumswerte verglichen werden. Konvertieren Sie sie einfach in ein Datum. Verwenden Sienew Date()
sie zur Vereinfachung der Erklärung nur neu, aber Sie können es tun, wie Sie möchten:3. Vergleichen Sie sie jetzt einfach mit dem
>
<
>=
<=
quelle
<
,>
,<=
,>=
) verwendet wird, werden die Date - Objekte zunächst in Unix - Epoche (Sekunden), und es funktioniert gut. Dies kann jedoch zu dem häufigen Fehler führen,date1 == date2
dass tatsächlich ein Fehler eingeführt wird, da nicht der Wert, sondern die Instanzgleichheit überprüft wird. Um dies zu verhindern und die Gleichheit des Datumswerts zu überprüfen, würde dies funktionieren:date1.valueOf() == date2.valueOf()
oder kürzerdate1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
undNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Nur Tag vergleichen (Zeitkomponente ignorieren):
Verwendungszweck:
quelle
Welches Format?
Wenn Sie ein Javascript- Datumsobjekt erstellen , können Sie es einfach subtrahieren, um einen Millisekundenunterschied zu erhalten (bearbeiten: oder einfach vergleichen):
quelle
==
oben erwähnte Vergleichsproblem vermeidet .Sie verwenden diesen Code,
Überprüfen Sie auch diesen Link http://www.w3schools.com/js/js_obj_date.asp
quelle
KURZE ANTWORT
Hier ist eine Funktion, die {boolean} zurückgibt, wenn die Demo von dateTime> zu dateTime in Aktion ist
Erläuterung
jsFiddle
Da Sie jetzt beide Datums- und Uhrzeitangaben im Zahlentyp haben, können Sie sie mit beliebigen Vergleichsvorgängen vergleichen
(>, <, = ,! =, == ,! ==,> = AND <=)
Dann
Wenn Sie mit der
C#
benutzerdefinierten Zeichenfolge für Datums- und Zeitformat vertraut sind, sollte diese Bibliothek genau dasselbe tun und Ihnen dabei helfen, Datum und Uhrzeit dtmFRM zu formatieren, unabhängig davon, ob Sie eine Datums- / Zeitzeichenfolge oder ein Unix-Format übergebenVerwendungszweck
DEMO
alle müssen Sie tun , irgendwelches Format in der Bibliothek befriedet ist vorbei
js
Dateiquelle
Der einfache Weg ist,
quelle
Hinweis - Nur Datum vergleichen Teil:
Wenn wir zwei Daten in Javascript vergleichen. Es werden auch Stunden, Minuten und Sekunden berücksichtigt. Wenn wir also nur das Datum vergleichen müssen, ist dies der Ansatz:
Jetzt:
if date1.valueOf()> date2.valueOf()
wird wie ein Zauber wirken.quelle
quelle
a
undb
wobeiDate
Objekte , die Sie auch nutzen könnenreturn a*1 == b*1;
+a == +b
quelle
Um den vielen vorhandenen Optionen noch eine weitere Möglichkeit hinzuzufügen, können Sie Folgendes versuchen:
... was für mich zu funktionieren scheint. Natürlich müssen Sie sicherstellen, dass beide Daten nicht undefiniert sind ...
Auf diese Weise können wir sicherstellen, dass ein positiver Vergleich durchgeführt wird, wenn beide ebenfalls undefiniert sind, oder ...
... wenn Sie es vorziehen, dass sie nicht gleich sind.
quelle
Über Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
Die Methode gibt 1 zurück, wenn
dateTimeA
größer als istdateTimeB
Die Methode gibt 0 zurück, wenn
dateTimeA
gleichdateTimeB
Die Methode gibt -1 zurück, wenn sie
dateTimeA
kleiner als istdateTimeB
quelle
Date
Objekte durchzuführen .<
oder>
Operatoren, wenn der Moment bereits mit praktischen Vergleichsmethoden wie.isBefore
und.isAfter
Hüten Sie sich vor der Zeitzone
Ein Javascript-Datum kennt keine Zeitzone . Es ist ein Moment in der Zeit (Ticks seit der Epoche) mit praktischen Funktionen zum Übersetzen von und zu Zeichenfolgen in der "lokalen" Zeitzone. Wenn Sie mit Datumsangaben mithilfe von Datumsobjekten arbeiten möchten, wie dies hier jeder tut, möchten Sie, dass Ihre Datumsangaben UTC Mitternacht zu Beginn des betreffenden Datums darstellen. Dies ist eine übliche und notwendige Konvention, mit der Sie unabhängig von der Jahreszeit oder der Zeitzone ihrer Erstellung mit Daten arbeiten können. Sie müssen also sehr wachsam sein, um den Begriff der Zeitzone zu verwalten, insbesondere wenn Sie Ihr Mitternachts-UTC-Datumsobjekt erstellen.
In den meisten Fällen soll Ihr Datum die Zeitzone des Benutzers widerspiegeln. Klicken Sie, wenn heute Ihr Geburtstag ist . Benutzer in Neuseeland und den USA klicken gleichzeitig und erhalten unterschiedliche Daten. In diesem Fall tun Sie dies ...
Manchmal übertrifft die internationale Vergleichbarkeit die lokale Genauigkeit. In diesem Fall tun Sie dies ...
Jetzt können Sie Ihre Datumsobjekte direkt vergleichen, wie die anderen Antworten vermuten lassen.
Nachdem Sie beim Erstellen darauf geachtet haben, die Zeitzone zu verwalten, müssen Sie auch sicherstellen, dass die Zeitzone beim Konvertieren in eine Zeichenfolgendarstellung nicht angezeigt wird. So können Sie sicher verwenden ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
Und vermeiden Sie alles andere, besonders ...
getYear()
,getMonth()
,getDate()
quelle
Angenommen, Sie haben die Datumsobjekte A und B, erhalten ihren EPOC-Zeitwert und subtrahieren dann, um die Differenz in Millisekunden zu erhalten.
Das ist alles.
quelle
Um zwei Daten zu vergleichen, können wir die JavaScript-Bibliothek date.js verwenden, die Sie unter folgender Adresse finden: https://code.google.com/archive/p/datejs/downloads
und verwenden Sie die
Date.compare( Date date1, Date date2 )
Methode und es wird eine Zahl zurückgegeben, die das folgende Ergebnis bedeutet:-1 = Datum1 ist weniger als Datum2.
0 = Werte sind gleich.
1 = Datum1 ist größer als Datum2.
quelle
Wenn Sie zwei Daten subtrahieren, erhalten Sie die Differenz in Millisekunden, wenn Sie
0
dasselbe Datum erhaltenquelle
Um Datumsangaben aus freiem Text in Javascript zu erstellen, müssen Sie diese in das Date () -Objekt analysieren.
Sie können Date.parse () verwenden, bei dem Freitext versucht, es in ein neues Datum umzuwandeln. Wenn Sie jedoch die Kontrolle über die Seite haben, würde ich empfehlen, stattdessen HTML-Auswahlfelder oder eine Datumsauswahl wie das YUI-Kalendersteuerelement oder die jQuery-Benutzeroberfläche zu verwenden Datepicker .
Sobald Sie ein Datum haben, auf das andere hingewiesen haben, können Sie die Daten mithilfe einer einfachen Arithmetik subtrahieren und wieder in eine Anzahl von Tagen umwandeln, indem Sie die Anzahl (in Sekunden) durch die Anzahl der Sekunden pro Tag (60 * 60 *) dividieren. 24 = 86400).
quelle
quelle
Eine verbesserte Version des von "some" geposteten Codes
Verwendungszweck:
quelle
Wenn Ihr Datumsformat wie folgt lautet, können Sie diesen Code verwenden:
Es wird geprüft, ob die
20121121
Anzahl größer als ist20121103
oder nicht.quelle
first == second
oderfirst < second
oderfirst > second
. Das ist eine der vielen Schönheiten mit ISO8601 im Vergleich zu MM / TT / JJ, TT / MM / JJ, JJ / TT / MM, TT / JJ / MM oder MM / JJ / TT.Ich speichere normalerweise
Dates
wietimestamps(Number)
in Datenbanken.Wenn ich vergleichen muss, vergleiche ich einfach zwischen diesen Zeitstempeln oder
konvertieren Sie es in Datumsobjekt und vergleichen Sie es
> <
gegebenenfalls mit.Beachten Sie, dass == oder === nur dann ordnungsgemäß funktioniert, wenn Ihre Variablen Referenzen desselben Datumsobjekts sind.
Konvertieren Sie diese Datumsobjekte zuerst in einen Zeitstempel (eine Nummer) und vergleichen Sie dann deren Gleichheit.
Datum zum Zeitstempel
Zeitstempel bis heute
quelle
Dates
Versuchen Sie vor dem Vergleichen des Objekts, beide Millisekunden auf Null zu setzenDate.setMilliseconds(0);
.In einigen Fällen, in denen das
Date
Objekt dynamisch in Javascript erstellt wird,Date.getTime()
ändern sich die Millisekunden , wenn Sie das weiter drucken , wodurch die Gleichheit beider Daten verhindert wird.quelle
Performance
Heute 2020.02.27 teste ich ausgewählte Lösungen unter Chrome v80.0, Safari v13.0.5 und Firefox 73.0.1 unter MacOs High Sierra v10.13.6
Schlussfolgerungen
d1==d2
(D) undd1===d2
(E) sind für alle Browser am schnellstengetTime
(A) ist schneller alsvalueOf
(B) (beide sind mittelschnell)Einzelheiten
Im Folgenden werden Snippet-Lösungen vorgestellt, die in Leistungstests verwendet werden. Sie können HIER einen Test in Ihrer Maschine durchführen
Code-Snippet anzeigen
Ergebnisse für Chrom
quelle
d1==d2
oderd1===d2
ist im Kontext der Frage nutzlos.Verwenden Sie diesen Code, um das Datum mit Javascript zu vergleichen.
Danke D.Jeeva
quelle
quelle
Folgendes habe ich in einem meiner Projekte getan:
Aufruf auf Formular onsubmit. hoffe das hilft.
quelle