So erstellen Sie eine datetime-Prüfer in einer Zend Framework form?
Standardmäßig eine Zend Framework-Datum Prüfung verwendet das Datumsformat yyyy-MM-dd
:
$dateValidator = new Zend_Validate_Date();
Aber ich möchte hinzufügen, Stunde und minute Validierung. In anderen Worten, ich möchte, dass der Benutzer geben Sie die Stunde und minute. Aber der folgende Code funktioniert nicht:
$dateValidator = new Zend_Validate_Date('yyyy-MM-dd hh:ii');
Wenn ich eingeben 2010-02-01
, bekomme ich eine Fehlermeldung, dass das Datum nicht passt das format. Wenn ich enter 2010-02-01 3
es nicht beschweren. Was es tut, ist vorausgesetzt, dass der Benutzer bedeutet 2010-02-01 03:00
statt zu erzwingen, dass der Benutzer das Datum in dem angegebenen format.
Wie kann ich erzwingen, dass das Datum muss eingegeben werden in dem angegebenen format?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie unter: http://framework.zend.com/issues/browse/ZF-6369
Im Grunde, worauf es ankommt, ist, dass der code zugrunde liegenden format-Validierung funktioniert nicht richtig. Anstatt mit strenge Validierung, wird es versuchen, Sie zu zwingen, die vorgesehenen Datum in etwas, das validieren und so erhalten Sie hanky Ergebnisse.
Er sieht aus wie der bug wurde markiert als 'Major', also hoffentlich werden wir sehen, ein fix bald.
Hinzufügen zu Noahs Antwort
Zend_Validate_Date
ist wirklich ziemlich hässlich und unflexibel; das ist, wenn Sie möchten, um eine allgemeinere Richtlinie für die Datumseingabe.Nun, wenn ZF geliefert mit einem
Zend_Filter_Date
normalisieren würde, dass die verschiedenen trivial (wenn auch sehr parseable) Formate Datum-Selektoren /Benutzer-input versorgt, das wäre eine andere Geschichte, da könnte man filter das Datum in ein normalisiertes format, bestätigen Sie anschließend, dass es in diesem format. Aber es funktioniert nicht.Egal, obwohl, es gibt viele vernünftige Lösungen für dieses problem. Wahrscheinlich der einfachste von denen ist diese:
Mir persönlich ist es egal, ob ein date /datetime kommt in yyyy/MM/dd, Sept 23, 2012, oder "-2 weeks" -- alles, was ich wirklich interessiert, ist, ob oder nicht, strtotime ist schlau genug, zu analysieren.
+1 zu Stephen ' s Antwort.
Ich ging für eine ähnliche Lösung, da ich bereits wusste, dass das format, das ich hatte, zu überprüfen: