2010-12-08 3 views
1

Ich habe ein Problem, bei dem Zend_Date :: isDate true zurückgibt, auch wenn der Wert nicht unbedingt dem angegebenen Format entspricht.

Zum Beispiel:

$time = "12:34:56"; // Time doesn't have AM/PM attached 

if(Zend_Date::isDate($time, 'hh:mm:ss a')) 
    echo "this is true"; 
else 
    echo "this is false"; 

Dies ist immer der Fall, auch wenn das Format der ‚a‘ listet angibt, dass es braucht „Uhrzeit, lokalisiert“ (was in meinem Fall ist „AM“/"PM "). Selbst eine komplett falsch formatierte Zeit, wie '12: 12: 34: 56: 56 'wird immernoch wahr sein. Eine Zeit von ': 34: 56' wird jedoch falsch zurückgegeben. Ist das ein Fehler oder fehlt mir etwas, wenn ich daran denke, dass das Format, das ich gebe, stimmt?

Danke!

Antwort

3

Ich glaube nicht, dass Zend_Date gebaut wird, um ein Format zu erzwingen. Es ist gebaut, um zu antworten "Wenn ich Zend_Date diese Zeichenfolge gebe, kannst du es in diesem Format schieben?" Es ist wirklich irreführend.

In Ihrem Beispiel, es ist wahr, aber es wertet tatsächlich:

Jan 25, 35 12:00:00 AM 

die Sie wahrscheinlich nicht erwartet.

In Ihrem falschen Beispiel, es ist auch wahr, es ausgewertet:

Dec 14, 34 8:56:00 AM (Dec 12, 34 + 56 hours and 56 minutes) 

Um Validate ein Datum, das ich glaube, Sie wollen eine Zend_Validator ist zu verwenden ...

$validator = new Zend_Validate_Date(array('format' => 'hh:mm:ss a')); 
    var_dump($validator->isValid("12:34:56 pm")); // true 
    var_dump($validator->isValid("14:34:56 pm")); // false, actually 2pm 
    var_dump($validator->isValid("01:11:11 am")); // true 
    var_dump($validator->isValid("01:11:11 xm")); // true, 24h fallback 
    var_dump($validator->isValid("24:01:01")); // false 
    var_dump($validator->isValid("16:01:01")); // true, 24h fallback 

Wenn du deine Daten zuerst durch die Validierung ausführst, dann solltest du in Zend_Date die erwarteten Ergebnisse erhalten.

+0

Leider verwendet Zend_Validate_Date auch Zend_Date, also hat es die gleichen Probleme. Siehe http://framework.zend.com/issues/browse/ZF-7583 –