在dd/mm/yy php中验证历史日期


Validate Historic Date in dd/mm/yy php

我有一个文本输入,用户在其中以dd/mm/yy格式输入日期。提交时,它会检查日期是否有效,以及日期是否在过去(需要是过去的)。我使用的是下面的代码,然而,尽管这对我的开发领域很有帮助,但它所在的服务器只有5.2.17版本的PHP,我认为我得到的只能在5.3或更高版本上使用。是否有将条目转换为dd/mm/yy并确保其为历史记录的解决方案?谢谢!

if (isset($_POST['SubmitSave'])) {  
//date validation  

if($_POST['DateOfCall']!=NULL)  
{  
    $dt = $_POST['DateOfCall'];  
    $array = explode("/",$dt);  
    $day = $array[0];  
    $month = $array[1];  
    $year = $array[2];  
    if(!checkdate( $month,$day, $year))  
    {  
   echo '<script type="text/javascript">'
   ,   'alert ( "Not a Valid Date of Call" );'
   , '</script>';
    }  
    else  
    {  

    $today = time();
    $Date_Entry =$_POST['DateOfCall']; 
$show_date = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('d/m/Y');
    $dt = strtotime($show_date);

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

    unset($dt);
    unset($Date_Entry); 

    }  
}  

}

else if......

试试这个。

<?php
    //$date = "18/12/2013"; # bad
    $date = "18/1/2013"; # good
    list($day, $month, $year) = explode("/", $date);
    if (checkdate($month, $day, $year) && strtotime("$year/$month/$day") < time()) {
        echo "good";
    } else {
        echo "bad";
    }
?>  

您有以下代码:

$show_date = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('d/m/Y');
$dt = strtotime($show_date);

您的问题是createFromFormat()只是在PHP 5.3中添加的,所以它在5.2中不起作用。

鉴于此,您的问题基本上只是5.2中php-dateTime::createFromFormat的重复?

总结一下给出的答案,php5.2和更早版本并没有任何好的导入日期的解决方案;它有几个坏的解决方案,其中strtotime()是最明显的。你可以试试

$dt = strtotime($Date_Entry);

应该足以做你想做的事。但要注意strtotime()和模糊日期格式(如m/d/y)的已知怪癖。

在php5.3及更高版本中,应该使用createFromFormat()而不是strtotime()

希望能有所帮助。

顺便说一句,值得注意的是,即使在5.3中,你写的代码(我在这个答案的顶部引用了这段代码)也是多余的;这里不需要使用strtotime(),因为DateTime::format()方法可以直接输出时间戳。你只需要这个:

$dt = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('U');