Zend_Date :: isDate不会强制执行$ format

时间:2010-12-08 19:13:02

标签: zend-framework zend-date

我遇到一个问题,即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'仍然会恢复正常。然而,':34:56'的时间将返回false。这是一个错误还是我错过了一些东西,认为我给它的格式是需要匹配的?

谢谢!

1 个答案:

答案 0 :(得分: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,您应该会得到预期的结果。

相关问题