我有一个文本输入,用户在其中以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');