2013-07-01 147 views
0

希望你能帮忙,我有下面的代码来检查两个,如果一个日期字段是有效的,并且它发生在过去。有效的格式部分工作,但它一直说,日期是在未来(因此是不可接受的),无论它是否是。我在这里错过了什么?比较日期文本字段到今天的日期

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

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

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

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



} 

Thankyou提前!

回答

0

您以不同的格式混合日期。 strtotime返回一个整数(Unix时间戳),而date返回文本表示(字符串)。将date("d/m/y")替换为time(),它将起作用。

+0

这工作,排序的,但只有基于一年,所以如果我输入02/07/14它承认它是在未来,但如果我输入明天日期02/07/13它不?有什么我需要做的吗? –

+0

也随机04/06/13说这是未来.... –

+0

你必须*一致*!可以使用mm/dd/yy或dd/mm/yy,但不要混合使用。 – str

0

()实际发生顺序的参数了checkdate:

checkdate($month, $day, $year) 

所以切换的地方用$月份和$一天在你的代码。

第二个错误是你与if(strtotime($dt)>$today)一致,你应该在那里把$ today转换成unix-time; if(strtotime($dt) > strtotime($today))

0

您可以用该日期的UNIX时间戳表示比较time()

if (strtotime("MM/DD/YYYY 4:00PM") > time()) 
{ 
    // given date is in future. Proceed. 
} 

文档:strtotime

相关问题