我遇到一个问题,即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。这是一个错误还是我错过了一些东西,认为我给它的格式是需要匹配的?
谢谢!
答案 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,您应该会得到预期的结果。