4

我正在使用 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 它没有转换格式。所以如何检查一个值是否是有效日期,如果它是 YYYY-MM-DD 或 YYYY-MM-DD H:i:s 格式使用 zend。

4

2 回答 2

4

问题是 Zend_Validate_Date 没有正确处理时间戳。一种选择是通过传递它来规范化 $valuedatestrtotime随时修剪。

$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 文档的这一部分此堆栈溢出问题

于 2013-05-27T06:41:25.673 回答
1

试试这个:

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”格式。仅当日期有效时,您才会以 $wanted_format 格式获得有效的日期结果。

于 2013-05-28T10:21:40.963 回答