2013-07-01 4 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>'; 
    } 
} 



} 

Заранее благодарю!

ответ

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

Вы можете сравнить time() с отметкой времени представления UNIX этой даты:

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

Документация: strtotime

Смежные вопросы