1

日付バリデーターコードセグメントがあり、将来の日付を検証することになっています。デバッグの目的で、明日までに、または約3時間で期限切れにする必要があります。これを書いている時点で、明日は12月18日です。その午後10時40分GMT-512月17日それは過去としてフラグを立てます。日付は、日、月、年の3つの投稿変数で入力され、連結され、「01:01:59」が追加され、タイムスタンプとしてテーブルに挿入されます。テーブルでは、スクリプトによって事前にチェックされ、アイテムの有効期限が切れているかどうかが確認されます。以下のコードは、2日以内の日付を検証しません。理由がわかりません。

コード:

if(check_post('day')&&check_post('month')&&check_post('year'))
{
    //die("day: ".$_POST['day']." month: ".$_POST['month']." year: ".$_POST['year']);
    if(!check_post('day',"Select Day")&&!check_post('month',"Select Month")&&!check_post('year',"Select Year"))
    {
        $days = array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
        $today = explode("-",date("d-m-Y"));
        if(checkdate($_POST['month'],$_POST['day'],$_POST['year']))
        {
            $c_y = ($_POST['year']==$today[2]);
            $c_m = ($_POST['month']==$today[1]);
            $p_d = ($today[0]>$_POST['day']);
            $p_m = ($today[1]>$_POST['month']);
            if(!($c_y&&(($c_m&&$p_d)||$p_m)))
            {
                $_POST['date']=strval($_POST['year'])."-".(($_POST['month']>9)?strval($_POST['month']):"0".strval($_POST['month']))."-".(($_POST['day']>9)?strval($_POST['day']):"0".strval($_POST['day']));
                $_POST['date'] .= " 01:01:59";
                //$_POST['date'] = mktime(0,0,0,$_POST['month'],$_POST['day'],$_POST['year']);
                //die($_POST['date']);
            }
            else
            {
                add_error("Date must be current");
            }
        }
        else
        {
            add_error("Invalid expiration date");
        }
    }
    else 
    {
        add_error("Pick an expiration date");
    }
}
else
{
    add_error("Date not set");
}

私のためにこれを行う機能はありませんか?

4

1 に答える 1

2

簡単な文字列比較で次のことができます。

$today = date("Y-m-d");
$date = $_POST['year'] . '-' . 
    str_pad($_POST['month'], '0', 2, STR_PAD_LEFT} . '-' .
    str_pad($_POST['day'], '0', 2, STR_PAD_LEFT);

if ($date > $today) {
    // future date
} else {
    // something else
}

または:

if (strtotime("{$_POST['year']}-{$_POST['month']}-{$_POST['day']}") > time()) {
    // future date
}

time()日付と時刻の両方のコンポーネントもあるため、これは完全に同じではありませんが、問題なく機能するはずです。

于 2012-12-18T04:19:44.457 に答える