我有一个正常运行的脚本,工作正常但不正常。该函数假设计算两个日期/时间之间的时间差。
第一个日期是当前日期和时间(日期+小时:分钟),第二个日期由用户选择。
目的是在当前日期/时间在用户选择日期后24小时内显示错误。即如果今天是23/20/2012 16:00并且用户选择24/10/2012 15:00(这意味着它在24小时内),但如果用户选择26/10/2012 19:00然后它通过了24小时。
现在这个工作正常,但是当日期改变了它的年份(当用户在2012年12月31日之后选择了任何日期时......它假设它仍然在24小时之内......而且我很不知道这是怎么发生的......任何人都可以解释一下我做错了吗?
$dt = $_GET['dt']; $tm = $_GET['tm'];
// Current Date an time (Hrs & Mins)
$date1 = date("Y-m-d H:i");
// Chosen Date/Time
$date2 = date("Y-m-d", strtotime( "$dt" ) );
$diff = strtotime($date2." $tm") + - strtotime($date1);
if($diff/3600 < 24)
echo "0";
else
echo "1";
以下是调用
的相应Ajaxfunction getAjaxTime()
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
dt = document.frm.arrival_date.value;
tm = document.frm.arrival_hour.value +':'+document.frm.arrival_min.value;
xmlHttp.open("GET","<?php echo $base_dir;?>/admin/get/timediff.php?dt="+encodeURI(dt)+"&tm="+encodeURI(tm),false);
xmlHttp.send(null);
return xmlHttp.responseText;
}
答案 0 :(得分:0)
我会尝试这样的事情:
function isDateWithin24Hours($targetDate, $currentDate = 'now') {
$targetDate = new DateTime($targetDate);
$currentDate = new DateTime($currentDate);
$interval = $targetDate->diff($currentDate);
//%a = total number of days
if ($interval->format('%a') > 1) {
return (int) false;
}
return (int) true;
}
echo isDateWithin24Hours('2012-10-24 19:00:00');
echo isDateWithin24Hours('2012-10-24 19:00:00', '2012-10-23 18:00:00');
答案 1 :(得分:0)
根据php手册 - http://us3.php.net/manual/en/datetime.formats.date.php - 您的日期不是有效格式:
24/10/2013 // with / as deliminators
这些是有效的
24-10-2013 // with - as deliminators
10/24/2013 // with / as deliminators and as m/d/Y
更新 -
此外,以下格式在strtotime
&amp; date
-
Thursday, 10 May, 2012 00:30
但这是有效的 -
Thursday, May 10, 2012 00:30
更新#2
事实上,一旦您的$_GET['dt']
采用有效的PHP格式,您就可以将代码简化为 -
$dt = $_GET['dt']; $tm = $_GET['tm'];
// Current Date an time (Hrs & Mins)
$date1 = date("Y-m-d H:i");
$diff = strtotime($dt." ".$tm) + - strtotime($date1);
if($diff/3600 < 24)
echo "0";
else
echo "1";