网站首页php

php校验日期格式函数

发布时间:2016-02-21 20:02:33编辑:阅读(4322)

    一言不合就上源码 ..


    /**
     * 校验日期格式是否正确
     *
     * @param string $date 日期
     * @param string $formats 需要检验的格式
     * @return boolean
     */
    function checkDateValid($date, $format="Y-m-d") {
        if (!strtotime($date)) { //strtotime转换不对,日期格式显然不对。
            return false;
        }    
        $strArr = explode("-",$date);
        if(empty($strArr)){   return false; }
        foreach($strArr as $key=>$val){
            if(!isset($val[1])){
              $strArr[$key] = "0".$val;
            }
        }
        $str =implode("-",$strArr);
        $unixTime=strtotime($str);
        $checkDate= date($format,$unixTime);
        return ($checkDate==$str);
    }


    使用方法:

    $date = '2015-2-29';
    if(!checkDateValid($date)){
        echo '非法日期';
    }


    ----------------------------神奇的分隔线----------------------------------


    下面是正则表达式的实现方式:


    function checkDateValidByRegular($date, $format="Y-m-d") {    
       if (!strtotime($date)) { 
            //strtotime转换不对,日期格式显然不对。        
            return false;    
       }        
       $strArr = explode("-",$date);    
       if(empty($strArr)){   return false;   }
       $strArr[1]    =     sprintf("%02d", $strArr[1]);
       $strArr[2]    =     sprintf("%02d", $strArr[2]);    
       $str       =     implode('-', $strArr);           
       $regular        = '/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])
       |(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]
       |[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/';
       return (preg_match($regular, $str));
    }


    使用方法:

    $date = '2015-2-29';
    if(!checkDateValidByRegular($date)){
        echo '非法日期';
    }






评论