年变化时,时差不起作用

时间:2012-10-23 18:07:42

标签: php ajax

我有一个正常运行的脚本,工作正常但不正常。该函数假设计算两个日期/时间之间的时间差。

第一个日期是当前日期和时间(日期+小时:分钟),第二个日期由用户选择。

目的是在当前日期/时间在用户选择日期后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";

以下是调用

的相应Ajax
function 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; 
}

2 个答案:

答案 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";