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:
bower install moment --save # bower
npm install moment --save # npm
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
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:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
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:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
Und Sie können mehrere Formate als Array verwenden:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015 :) 13*17*21", formats, true).isValid(); // true
moment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
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.