0

我有一个文本输入,用户在其中输入 dd/mm/yy 格式的日期。在提交时,它会检查日期是否有效,以及日期是否在过去(它必须是过去的)。我正在使用下面的代码,但是虽然这在我的开发区域中运行良好,但它托管的服务器只有 PHP 版本 5.2.17,我认为我所拥有的仅适用于 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......
4

2 回答 2

1

尝试这个。

<?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";
    }
?>  
于 2013-07-04T10:22:18.900 回答
0

您有以下代码:

$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 的副本?

总结那里给出的答案,php 5.2 及更早版本并没有任何好的导入日期解决方案;它有几个不好的解决方案,其中strtotime()最明显。你可以试试

$dt = strtotime($Date_Entry);

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

在 php 5.3 及更高版本中,您应该createFromFormat()使用strtotime().

希望有帮助。

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

$dt = DateTime::createFromFormat('m/d/Y', $Date_Entry)->format('U');
于 2013-07-04T10:51:33.993 回答