Was ist eine einfache Möglichkeit, um zu überprüfen, ob ein Wert ein gültiges Datum ist, wobei jedes bekannte Datumsformat zulässig ist.
Zum Beispiel habe ich die Werte 10-11-2009
, 10/11/2009
, 2009-11-10T07:00:00+0000
die alle als Datumswerte erkannt werden sollen, und die Werte 200
, 10
, 350
, die nicht als Datumswert erkannt werden. Was ist der einfachste Weg, dies zu überprüfen, wenn dies überhaupt möglich ist? Weil Zeitstempel auch erlaubt wären.
javascript
date-format
Thizzer
quelle
quelle
Antworten:
Würde
Date.parse()
ausreichen?Siehe die entsprechende MDN-Dokumentationsseite .
quelle
Date.parse("4.3")
ist986270400000
.Update 2015
Es ist eine alte Frage, aber andere neue Fragen wie:
Schließen Sie als Duplikate dieses, daher denke ich, dass es wichtig ist, hier einige neue Informationen hinzuzufügen. Ich schreibe es, weil ich Angst hatte, dass die Leute tatsächlich einen Teil des hier veröffentlichten Codes kopieren und einfügen und ihn in der Produktion verwenden.
Die meisten Antworten hier verwenden entweder einige komplexe reguläre Ausdrücke, die nur einigen sehr spezifischen Formaten entsprechen und diese tatsächlich falsch ausführen (z. B. den 32. Januar, wenn das tatsächliche ISO-Datum nicht wie angegeben übereinstimmt - siehe Demo ), oder sie versuchen, etwas an den
Date
Konstruktor und zu übergeben wünsche das Beste.Moment nutzen
Wie ich in dieser Antwort erklärt habe, steht derzeit eine Bibliothek dafür zur Verfügung: Moment.js
Es ist eine Bibliothek zum Parsen, Validieren, Bearbeiten und Anzeigen von Datumsangaben in JavaScript. Sie verfügt über eine wesentlich umfangreichere API als die Standardfunktionen für die JavaScript-Datumsverarbeitung.
Es ist 12kB minimiert / gezippt und funktioniert in Node.js und anderen Orten:
Mit Moment können Sie sehr genau festlegen, ob gültige Daten vorliegen. Manchmal ist es sehr wichtig, einige Hinweise zum erwarteten Format hinzuzufügen. Beispielsweise sieht ein Datum wie der 22.06.2015 wie ein gültiges Datum aus, es sei denn, Sie verwenden ein Format TT / MM / JJJJ. In diesem Fall sollte dieses Datum als ungültig abgelehnt werden. Es gibt nur wenige Möglichkeiten, wie Sie Moment mitteilen können, welches Format Sie erwarten, zum Beispiel:
Das
true
Argument ist vorhanden, sodass der Moment nicht versucht, die Eingabe zu analysieren, wenn sie nicht genau einem der bereitgestellten Formate entspricht (es sollte meiner Meinung nach ein Standardverhalten sein).Sie können ein intern bereitgestelltes Format verwenden:
Und Sie können mehrere Formate als Array verwenden:
Siehe: DEMO .
Andere Bibliotheken
Wenn Sie Moment.js nicht verwenden möchten, gibt es auch andere Bibliotheken:
Update 2016
Ich habe das Immoment- Modul erstellt, das wie (eine Teilmenge von) Moment ist, aber keine Überraschungen aufweist, die durch die Mutation vorhandener Objekte verursacht werden ( weitere Informationen finden Sie in den Dokumenten ).
Update 2018
Heute empfehle ich die Verwendung von Luxon für die Datums- / Zeitmanipulation anstelle von Moment, wodurch (im Gegensatz zu Moment) alle Objekte unveränderlich werden, sodass es keine bösen Überraschungen im Zusammenhang mit der impliziten Mutation von Datumsangaben gibt.
Mehr Info
Siehe auch:
Eine Reihe von Artikeln von Rob Gravelle über JavaScript-Datumsanalysebibliotheken:
Endeffekt
Natürlich kann jeder versuchen, das Rad neu zu erfinden, einen regulären Ausdruck zu schreiben (aber bitte lesen Sie vorher ISO 8601 und RFC 3339, bevor Sie dies tun) oder Buit-In-Konstruktoren mit zufälligen Daten aufrufen, um Fehlermeldungen wie
'Invalid Date'
(Sind Sie sicher, dass diese Nachricht ist) zu analysieren auf allen Plattformen genau gleich ? In allen Regionen? In der Zukunft?) oder Sie können eine getestete Lösung verwenden und Ihre Zeit nutzen, um sie zu verbessern, nicht neu zu erfinden. Alle hier aufgeführten Bibliotheken sind Open Source, freie Software.quelle
moment("whatever 123").isValid()
kehrt zurücktrue
.moment("06/22/2015", "DD/MM/YYYY", true).isValid();
mit dem explizit angegebenen erwarteten Datumsformat und einem Argument,true
das eine strikte Überprüfung bedeutet. Ich habe meine Antwort mit mehr Informationen und besseren Beispielen aktualisiert.So habe ich dieses Problem in einer App gelöst, an der ich gerade arbeite:
aktualisiert basierend auf dem Feedback von krillgar:
quelle
new Date(date)
kein "Ungültiges Datum" an.new Date(date) !== "Invalid Date"
wird immer zurückkehren wahr der linke Ausdruck mit einem ZeitWert ein Date - Objekt wird zurückkehren , da NaN , das nie sein kann ,===
in einen String. Verwendung von==
"funktioniert" aufgrund der Typkonvertierung. Da das Parsen von Datumszeichenfolgen jedoch immer noch weitgehend von der Implementierung abhängt, ist es für uns schwerwiegend fehlerhaft, zufällige Formate zu analysieren.isDate('Mac OS X 10.14.2')
gibt hier true zurück.new Date(date) === 'Invalid Date'
funktioniert nur in Firefox und Chrome. IE8 (der, den ich zu Testzwecken auf meinem Computer habe) gibt NaN.Wie in der akzeptierten Antwort angegeben,
Date.parse(date)
funktioniert dies auch für Zahlen. Um dies zu umgehen, können Sie auch überprüfen, ob es sich nicht um eine Zahl handelt (wenn Sie dies bestätigen möchten).quelle
isNan
ist keine Funktion; falscher Fall in der ersten Instanz.date
jaFoostreet 1
, wird Ihr Zustand als wahr bewertet.Wie wäre es mit so etwas? Es wird getestet, ob es sich um ein Datumsobjekt oder eine Datumszeichenfolge handelt:
Ich sollte erwähnen, dass dies nicht auf ISO-formatierte Zeichenfolgen getestet wird, aber mit etwas mehr Arbeit an RegExp sollten Sie gut sein.
quelle
Keine der Antworten hier befasst sich mit der Überprüfung, ob das Datum ungültig ist, wie z. B. dem 31. Februar. Diese Funktion behebt dies, indem sie überprüft, ob der zurückgegebene Monat dem ursprünglichen Monat entspricht, und sicherstellt, dass ein gültiges Jahr angegeben wurde.
quelle
Verwenden Sie den regulären Ausdruck, um ihn zu validieren.
quelle
Durch Bezugnahme auf alle obigen Kommentare bin ich zu einer Lösung gekommen.
Dies funktioniert, wenn das
Date
übergebene Format im ISO-Format vorliegt oder für andere Formate bearbeitet werden muss.Sie können hier auf JSFiddle spielen.
quelle
YYYY-MM-DD
es trivial,T00:00:00.000Z
diese Lösung anzuhängen und zu verwenden, um nach gültigen Zeichenfolgen zu suchen.Hier ist eine verbesserte Funktion, die nur verwendet
Date.parse()
:Hinweis: Date.parse () analysiert Zahlen : Gibt beispielsweise
Date.parse(1)
ein Datum zurück. Hier prüfen wir also, obs
es sich nicht um eine Nummer handelt, ob es sich um ein Datum handelt.quelle
Ich würde das tun
Spielen Sie hier
quelle
EXAMPLE STRING 12345
und sie gibt "Gültiges Datum" zurück.Hier ist eine minimalistische Version.
quelle
isDate(" 1")
Diese aufrufbare Funktion funktioniert einwandfrei und gibt für das gültige Datum true zurück. Rufen Sie unbedingt mit einem Datum im ISO-Format an (JJJJ-MM-TT oder JJJJ / MM / TT):
quelle
return !isNaN(Date.parse(isoDate)) || isoDate == new Date(isoDate).toISOString().substr(0,10);
Ich weiß, dass es eine alte Frage ist, aber ich hatte das gleiche Problem und sah, dass keine der Antworten richtig funktionierte - insbesondere das Aussortieren von Zahlen (1.200.345 usw.) aus Daten, was die ursprüngliche Frage ist. Hier ist eine ziemlich unorthodoxe Methode, die mir einfällt und die zu funktionieren scheint. Bitte weisen Sie darauf hin, wenn es Fälle gibt, in denen dies fehlschlägt.
Dies ist die Zeile, um Zahlen auszusortieren. Somit könnte die gesamte Funktion folgendermaßen aussehen:
quelle
console.log("hello 1 ", isDate("hello 1 "));
gibt wahr zurückIst es in Ordnung zu prüfen, ob für das Objekt eine datumsbezogene Funktion verfügbar ist, um festzustellen, ob es sich um ein Datumsobjekt handelt oder nicht?
mögen
quelle
So mache ich es am Ende. Dies wird nicht alle Formate abdecken. Sie müssen entsprechend anpassen. Ich habe die Kontrolle über das Format, also funktioniert es für mich
quelle
Ok, das ist eine alte Frage, aber ich habe eine andere Lösung gefunden, als ich die Lösungen hier überprüft habe. Bei mir wird geprüft, ob die Funktion getTime () am Datumsobjekt vorhanden ist:
quelle
Eine leichte Bibliothek steht für Sie bereit: Day.js
quelle
Standardmäßig ist dies auf TRUE gesetzt. Selbst Zeichenfolgen mit falschem Format geben also gute Werte zurück.
Ich habe es so etwas benutzt:
quelle
Versuche dies:
quelle