0

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

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

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

2 回答 2

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');
于 2012-10-23T18:29:31.540 回答
0

根据 php 手册 - h​​ttp: //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& 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";
于 2012-10-23T18:30:09.007 回答