php - 在 zend 框架中检查有效日期

标签 php date datetime zend-framework zend-date

我正在使用 zend framework 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 检查一个值是否为 YYYY-MM-DD 或 YYYY-MM-DD H:i:s 格式的有效日期。

最佳答案

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

$value = date("Y-m-d", strtotime($value));

这将使日期始终为

YYYY-MM-DD 

另一种方法是创建您自己的时间戳验证器

唯一的要求是实现 isValid 和 getMessages 方法来实现 Zend_Validate_Date 具有可服务实现的接口(interface)。这将消除对输入日期格式的限制,但我认为这是我们的目标。如果您只想允许几种不同的格式,也可以很容易地在其中实现。

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; 
     }
}

另见 this part of the ZF docs要么 this stack overflow question

关于php - 在 zend 框架中检查有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16767366/

相关文章:

javascript - 如何在 jQuery 中获取数据 - PHP 中的多标签选择?

php - MySQL INSERT 只插入 foreach 循环的第一行

PHP 添加 1 个月至今

java - 获取 Java TimeZone 的缩写?

c# - 仅从 DateTime 对象获取日期或时间

python - 从数据框中打印单个日期字符串

php - 将数据库中的项目显示到具有不同项目的不同数据的 ListView 中

php - ORDER BY/CASE 组合导致 MySQL 查询不起作用

java - JodaTime 中格式错误的时区

c# - 两个日期之间的月差