2012-12-18 36 views
1

我有一個日期驗證器代碼段,它應該驗證任何未來的日期。爲了調試目的,我希望它在Tomorrow過期,或者在大約3個小時內過期。截至撰寫這篇明天是12月18日。其10:40 PM GMT-5 Dec 17它將其標記爲過去。日期輸入3個後期變量:日,月,年和連接,「01:01:59」追加,並作爲一個時間戳插入到一個表中,其中預先通過腳本檢查,以查看該項目是否已過期。下面的代碼不會驗證離2天以外的任何日期。我無法弄清楚爲什麼。PHP:我未來的日期驗證器出了什麼問題?

代碼:

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"); 
} 

沒有一些功能,這是否對我的權利?

+3

http://php.net/DateTime http://php.net/DateInterval - 就PHP4而言,我投票決定關閉這個問題,因爲它太本地化了。 – hakre

+2

即使在PHP4中,['strtotime'](http://php.net/strtotime)也是如此。此外,在PHP4上插入演講稿*可能過時並且可能不安全,不應該如何使用它,以及任何虛擬主機提供商如何仍然允許它被選擇是您不想與之做生意的公司。 – Charles

+0

謝謝查爾斯,我忘記了strtotime。如果您將該帖子作爲答案,我可以接受。我似乎錯過了很多。 –

回答

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()也有兩個日期和時間組成部分,但它應該只是罰款以及。