Datum input type Validierung in javascript?
Ich kann nicht ganz herausfinden, wie überprüft ein Datum-input-Typ in javascript. Ich habe versucht, auf der Suche im internet, aber ich konnte nichts finden.
Habe ich ein Feld, bitten Sie den Benutzer zur Eingabe seines Geburtstages. Ich möchte die Validierung in javascript mit der bestimmte Grenzwerte an den Tagen, Monaten und vor allem Jahren. Zum Beispiel, wenn der Benutzer die Eingabe mehr als 2016(oder das aktuelle Jahr), würde es dir eine Fehlermeldung geben.
Ich kann nicht ganz herausfinden, wie "extrahieren" Datum Eingabe und Steuerung aller Elemente (Tag, Monat, Jahr).
Hier ein Teil meiner html -
<form method="POST" action="request.jsp" onsubmit="return validate()">
Date of birth: <input type="date" id="bday" name="bday" value="">
</form>
Javascript:
var birthday = document.getElementById('bday').value;
Dies ist alles, was ich habe.. bitte helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
TLDR
Müssen Sie analysiert die Zeichenfolge als Datum (JavaScript bietet die
Date
API für diese use-case).Ausführliche Antwort
Du bist auf dem richtigen Weg. Hier ist ein JSBin Beispiel habe ich. Versuchen Sie das öffnen der Konsole und ändern Sie das Datum, und du wirst sehen, es protokolliert.
(Ich bin mit jQuery im obigen Beispiel nur für die Bequemlichkeit Willen, aber Sie können verwenden, was Sie wollen.)
Das problem, das Sie hier haben, ist, dass das Datum protokolliert wird, ein string. Sie können das JavaScript -
Date
Objekt zum Parsen der Zeichenfolge.Basierend auf was auch immer-Validierung, die Sie tun möchten, können Sie verschiedene Datum-Objekt-Methoden (wie getFullYear, zum Beispiel) und entsprechen jenen, die gegen die Eingabe.
Lasse ich die vollständige Umsetzung bis zu Ihnen, aber die Innenseite der
change
- Prozedur könnte wie folgt Aussehen:birthday
als ID) und beobachtet Ihreonchange
Veranstaltung. Sind Sie vertraut mit JavaScript-Ereignisse?<form>
Wenn Sie sind in der Lage, um den Wert des input-Elements mit:
Dann
birthday
zur Verfügung stehen werden Sie als string (alle Eingabe-Werte sind immer wieder in JavaScript als String). Von dort aus, würden Sie brauchen, um zu konvertieren, dass die string-date:Dann, sobald Sie haben die gesamte Tag, können Sie extrahieren Sie die Stücke mit den verschiedenen JavaScript-Datum - /Uhrzeit-Methoden:
Hier ist ein funktionierendes Beispiel:
JS:
HTML:
++day
ich bin Ost).Input type Datum wird nicht unterstützt in allen Browsern, so sollten Sie erkennen, dass und ersetzen Sie die Eingabe mit einem geeigneten alternative, die enthält das benötigte format.
Sofern unterstützt), der input gibt einen ISO-8601-format Datum Zeichenfolge ohne Zeitzone. Nach ISO 8601 ist, sollte dieser so behandelt werden, als lokale, aber TC39 in Ihrer Weisheit beschlossen, dass es behandelt werden sollte, wie die Weltzeit, also das ist, was Date.analysieren (und die Date-Konstruktor) in die meisten Fällen. In einigen wird er behandelt, wie lokale und im IE 8 als ungültig. Also für Systeme mit einer Zeitzone westlich von Greenwich,
Date.parse('2016-03-20')
zurückkehren wird ein Date-Objekt, dass, wenn Sie angezeigt werden, als eine lokale Datum, wird '2016-03-19', also einen Tag zu früh.So sollten Sie manuell analysieren die Datums-Zeichenfolge, überprüfen Sie das Datum mit den vielen Antworten hier, dann prüfen Sie, ob Jahr, Monat und Tag sind in Ihren Zwängen.
wenn Sie einfach nur versuchen, zu validieren, ob ein string ein gültiges Datum ist, können Sie einfach überprüfen, dass es schafft ein gültiges date-Objekt.
https://jsfiddle.net/46cztok6/
damit Ihre
validate()
- Funktion würde wie folgt Aussehen.return !isNaN(new Date(d));
. Sie sind jedoch auch angewiesen auf die Date-Konstruktor korrekt zu pasre die Zeichenfolge, etwas, das es notorisch schlecht (auch wenn voll kompatibel mit ECMAScript 2015).Hier ist eine Ablage, so können Sie haben eine Idee, wie wir starten diese Art von Feld: https://jsbin.com/lifacaxonu/edit?html,js,Konsole,Ausgabe