如何使用此日期验证代码创建php函数?

如何使用此日期验证代码创建php函数?,php,validation,function,date,Php,Validation,Function,Date,我有一段代码可以工作,但没有使它成为函数。但是,当我把它变成一个函数时,它总是返回false。此函数的目的是检查日期是否有效,顾名思义。有人能告诉我代码出了什么问题吗 function is_valid_date($a) { //date format Y-m-d H:i:s if(preg_match('/^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]\d|2[0123]):([0-5]\d):([0-5]\d

我有一段代码可以工作,但没有使它成为函数。但是,当我把它变成一个函数时,它总是返回false。此函数的目的是检查日期是否有效,顾名思义。有人能告诉我代码出了什么问题吗

function is_valid_date($a) {
//date format Y-m-d H:i:s
if(preg_match('/^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]\d|2[0123]):([0-5]\d):([0-5]\d)$/', $a)){ 
    list( $_date , $_time ) = explode(' ',$a);
    list ($year,$month,$day) = explode("-",$_date);
    list($hour,$minute,$second) = explode(":",$_time);

    if ($day == "31" && ($month == "4" || $month == "6" || $month == "9" || $month == "11" || $month == "04" || $month == "06" || $month == "09" ))  {
        return false;
    } elseif ($month == "2" || $month == "02") {
            if($year % 4==0){
                if($day == "30" || $day == "31"){
                    return false;
                } else {
                    return true;
                }
            }else{
                if($day == "29" || $day == "30" || $day == "31"){
                    return false;
                } else {
                    return true;
                }
            }
    }

}else{
    return false;

}
}
当我尝试

if (is_valid_date("2012-12-02 15:30:00")) { echo "valid date";} 
没有打印任何内容。

Put

return true;
函数结束之前(最后一个大括号之前))。否则,在某些情况下,将不返回任何内容,并将其视为
false

全部代码:

function is_valid_date($a) {
//date format Y-m-d H:i:s
if(preg_match('/^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]\d|2[0123]):([0-5]\d):([0-5]\d)$/', $a)){ 
    list( $_date , $_time ) = explode(' ',$a);
    list ($year,$month,$day) = explode("-",$_date);
    list($hour,$minute,$second) = explode(":",$_time);

    if ($day == "31" && ($month == "4" || $month == "6" || $month == "9" || $month == "11" || $month == "04" || $month == "06" || $month == "09" ))  {
        return false;
    } elseif ($month == "2" || $month == "02") {
            if($year % 4==0){
                if($day == "30" || $day == "31"){
                    return false;
                } else {
                    return true;
                }
            }else{
                if($day == "29" || $day == "30" || $day == "31"){
                    return false;
                } else {
                    return true;
                }
            }
    }

}else{
    return false;

}
    return true;

}

以下使用方法有什么问题

但不是

15:30:00
2012-12-02
2012/12/02 15:30:00
2012-13-02 15:30:00

我发现你的函数只能返回
true
否则如果month=2为什么要编写你自己的日期验证例程,而PHP已经内置了所有的功能?我想这正是你想要的。但是$matches 3 4和$matches 1是什么?@jinni正如你所看到的,我在
preg_match
调用中添加了一个参数
,$matches
。这意味着括号中的所有内容都被“匹配”并输出到这个
$match
数组中,该数组现在看起来如下所示(使用
print\u r
,从
2012-12-02 15:30:00
):
数组([0]=>2012-12-02 15:30:00[1]=>2012[2]=>20[3]=>12[4]=>02[5]=>15[6]=>30[7]=>00)
表示第3个是月,第4个是日,第1个参数是年。您可以在
preg\u match
手册页面上查看更多信息:
2012-10-13 00:00:00
1990-02-30 12:34:56
15:30:00
2012-12-02
2012/12/02 15:30:00
2012-13-02 15:30:00