我使用的是zend框架1.12.0,我有一个值从数据库获取要验证。也就是说,如果它是一个日期值,那么我必须将格式从YYYY-MM-DD更改为MM/DD/YYYY。否则我保持值为"。我使用以下代码
$validator = new Zend_Validate_Date();
if(trim($value)=='0000-00-00' || $validator->isValid(trim($value))){
if($validator->isValid(trim($value))){
$utilObj = new Utilityclass();
$arrayReturn[$key] = $utilObj->getDateMdy($value,"/");
}
else{
$arrayReturn[$key] = '';
}
}
我的问题是日期值可能是YYYY-MM-DD或YYYY-MM-DD H:i:s格式。所以当输入YYYY-MM-DD时,我得到了正确的输出。如果是YYYY-MM-DD H:i:s,则不转换格式。那么如何使用zend.
问题是Zend_Validate_Date不能正确处理时间戳。一种选择是通过将$值传递给date
和strtotime
来规范化$值,以便在任何时间内进行修剪。
$value = date("Y-m-d", strtotime($value));
这将使日期始终为
YYYY-MM-DD
另一种方法是创建自己的时间戳验证器
唯一的要求是实现isValid和getMessages方法,以实现Zend_Validate_Date具有可服务实现的接口。这将消除输入日期格式的限制但我认为这是我们的目标。如果你只是想允许几个不同的格式,也可以很容易地实现到这个。
class My_Validate_Datetime extends Zend_Validate_Date{
public function isValid($value){
// if strtotime can't understand a date it returns 0 which is falsey
if (strtotime($value)){
return true;
}
$this->_error(Zend_Validate_Date::INVALID_DATE);
return false;
}
}
见也ZF文档的这一部分这个堆栈溢出问题
试试这个:
function dateFormat($date, $wanted_format){
//Zend date
$zend_date = new Zend_Date();
$zend_date->set($date, "YYYY-mm-dd");
//validator
$validation_date = new Zend_Validate_Date();
if($validation_date->isValid($zend_date->get('YYYY-mm-dd'))){
return $zend_date->get($wanted_format);
}else {
return "";
}
}
它仍然会处理"YYYY-MM-DD H:i:s"格式。只有在日期有效的情况下,您才会在format $wanted_format中得到一个有效的日期结果。