2010-12-08 27 views
1

我有一個問題,Zend_Date :: isDate返回true,即使值不一定與給定的格式匹配。

例如:

$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"; 

這始終是真實的,即使格式列出了「A」表示需要「一天的時間,本地化」(這在我的情況是「AM」 /「PM 「)。即使是完全錯誤格式化的時間,例如'12:12:34:56:56'仍然會返回true。然而,':34:56'的時間將返回錯誤。這是一個錯誤還是我錯過了一些東西,認爲我給它的格式是需要匹配的東西?

謝謝!

回答

3

我不認爲Zend_Date是建立'執行'格式。它的目的是回答「如果我給Zend_Date這個字符串,你能用這種格式推動它嗎?」這真是誤導人。

在您的例子,它是真實的,但實際上它的計算結果爲:

Jan 25, 35 12:00:00 AM 

,你可能沒有想到的。

在您的虛假例子,這也是事實,它的計算結果爲:

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

驗證的日期,我想你想要做的就是使用Zend_Validator ...

$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 

如果您先通過驗證來運行您的日期,那麼進入Zend_Date您應該會得到預期的結果。

+0

不幸的是,Zend_Validate_Date也使用Zend_Date,所以它有同樣的問題。見http://framework.zend.com/issues/browse/ZF-7583 – 2013-10-08 15:57:12