2012-12-18 2 views
1

날짜 유효성 검사기 코드 세그먼트가 있습니다.이 코드 유효성 검사 코드는 미래 날짜를 확인합니다. 디버깅 목적으로 Tomorrow 또는 약 3 시간 후에 만료되기를 원합니다. 이 글을 쓰는 시점에서 내일은 12 월 18 일입니다. 10:40 PM GMT-5 12 월 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"); 
} 

?

$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 
} 

또는 :

+3

http://php.net/DateTime http://php.net/DateInterval - PHP4와 관련된 한,이 질문은 너무 현지화되어 있으므로 닫으려고했습니다. – hakre

+2

PHP4에서도 ['strtotime'] (http://php.net/strtotime)은 일이었습니다. 또한 php4에서 PHP4에 대한 강의 * here *를 삽입하고 사용하지 말아야하는 방법과 웹 호스팅 제공 업체가 선택하도록 허용하는 방법에 대해 여러분이 원하지 않는 회사를 삽입하십시오. – Charles

+0

찰리 고맙습니다, 나는 strtotime에 대해 잊어 버렸습니다. 당신이 대답으로 게시한다면 나는 그것을 받아 들일 수있다. 나는 많이 그리워하는 것 같다. –

답변

2

간단한 문자열 비교는 할 것 time() 또한 날짜 및 시간 구성 요소를 모두 가지고 있기 때문에이 완전히 동일하지 않습니다

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

,하지만 그냥 잘 작동합니다 게다가.

관련 문제