0

ユーザーが日付を dd/mm/yy 形式で入力するテキスト入力があります。送信時に、日付が有効であるかどうかと、日付が過去の日付である必要があるかどうかの両方がチェックされます。私は以下のコードを使用していますが、これは私の開発分野ではうまく機能しますが、ホストされているサーバーには PHP バージョン 5.2.17 しかなく、私が持っているものは 5.3 以降でしか機能しないと思います。エントリを dd/mm/yy に変換し、それが履歴であることを確認するソリューションはありますか? ありがとうございました!

if (isset($_POST['SubmitSave'])) {  
//date validation  


if($_POST['DateOfCall']!=NULL)  
{  
    $dt = $_POST['DateOfCall'];  
    $array = explode("/",$dt);  

    $day = $array[0];  
    $month = $array[1];  
    $year = $array[2];  

    if(!checkdate( $month,$day, $year))  
    {  
   echo '<script type="text/javascript">'
   ,   'alert ( "Not a Valid Date of Call" );'
   , '</script>';
    }  
    else  
    {  


    $today = time();
    $Date_Entry =$_POST['DateOfCall']; 

$show_date = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('d/m/Y');

    $dt = strtotime($show_date);


    if($dt > $today){ 
    echo '<script type="text/javascript">'
   ,   'alert ( "Date of Call is in the future..." );'
   , '</script>';
    }



    unset($dt);
    unset($Date_Entry); 


    }  
}  



}


else if......
4

2 に答える 2

1

これを試して。

<?php
    //$date = "18/12/2013"; # bad
    $date = "18/1/2013"; # good
    list($day, $month, $year) = explode("/", $date);
    if (checkdate($month, $day, $year) && strtotime("$year/$month/$day") < time()) {
        echo "good";
    } else {
        echo "bad";
    }
?>  
于 2013-07-04T10:22:18.900 に答える
0

次のコードがあります。

$show_date = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('d/m/Y');
$dt = strtotime($show_date);

問題はcreateFromFormat()、PHP 5.3 でのみ追加されたため、5.2 では機能しないことです。

それを考えると、あなたの質問は基本的に 5.2 の php dateTime::createFromFormat の複製に過ぎませんか?

そこで与えられた答えを要約すると、php 5.2 以前には、日付をインポートするための適切なソリューションが実際にはありません。いくつかの悪い解決策がありstrtotime()ますが、その中で最も明白なものです。あなたは試すことができます

$dt = strtotime($Date_Entry);

それはあなたが望むことをするのに十分なはずです。strtotime()ただし、あいまいな日付形式 ( など)に関する既知の癖に注意してm/d/yください。

PHP 5.3 以降では、createFromFormat()代わりに を使用する必要がありstrtotime()ます。

それが役立つことを願っています。

余談ですが、5.3 でも、あなたが作成したコード (この回答の冒頭で引用したもの) は冗長であることに注意してください。メソッドはタイムスタンプを直接出力できるstrtotime()ため、ここで使用する必要はありません。DateTime::format()これが必要なだけです:

$dt = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('U');
于 2013-07-04T10:51:33.993 に答える