0

関数にせずに機能するコードがあります。しかし、それを関数にすると、常に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";} 

何も印刷されていません。

4

2 に答える 2

1

次の使用の何が問題になっていますcheckdateか?

<?php
    function is_valid_date($date) {
        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)$/', $date, $matches)){
            return checkdate($matches[3], $matches[4], $matches[1]);
        }
        return false;
    }
    var_dump(is_valid_date("2012-12-02 15:30:00")); //true
?>

これは次のように一致します。

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

オンラインで実行されていることを確認するには、ここをクリックしてください

于 2012-12-01T21:29:14.327 に答える
0

置く

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;

}
于 2012-12-01T21:27:19.803 に答える