在PHP中查找2个日期之间的差异

时间:2015-12-14 14:52:21

标签: php jquery ajax date

我使用PHP,jQuery AJAX和HTML来创建时间表系统,为此用户需要在1个月内选择2个日期。该系统正在运行并显示(非常有限的)数据。

但是!当我实际选择超过月份限制的日期时(即比开始时间或开始后的另一年还要晚2个月),它仍会显示包含数据的表格。

为此,我有这个检查:

$dt1 = new DateTime($_REQUEST['startdate']);
$dt2 = new DateTime($_REQUEST['enddate']);
$diff = date_diff($dt1, $dt2);
// I have tried this the other way around and get the same result...
if($diff->m > 1 || $diff->y > 1)
{
    print("<center><strong>Time between dates it too great<br />Please choose another date or time within a month of each other</strong></center>");
    die();
}

日期由jQuery datepicker对象通过AJAX传递,例如,我使用的日期就这样传递:

  

2015年11月14日(开始日期)&amp;&amp; 2015年12月14日(结束日期) - 应显示数据
  2015年9月14日(开始日期)&amp;&amp; 2015年12月14日(结束日期) - 不应显示数据,但不应显示数据   2015年11月14日(开始日期)&amp;&amp; 2016年12月14日(结束日期) - 不应显示数据,但

有一个检查,看看给定的日期是否在另一个之前开始,这是有效的,我已经为此检查尝试了同样的事情,但没有成功,这个检查是这样的:

function CountDaysBetween($startDate, $endDate)
{
    $begin = strtotime($startDate);
    $end   = strtotime($endDate);
    if ($begin > $end) {
        echo "start date is in the future! <br />";
        return;
    } else {
        $no_days  = 0;
        $weekends = 0;
        while ($begin <= $end) {
            $no_days++; // no of days in the given interval
            $what_day = date("N", $begin);
            if ($what_day > 5) { // 6 and 7 are weekend days
                $weekends++;
            };
            $begin += 86400; // +1 day
        };
        $working_days = $no_days - $weekends;

        return $working_days + 1;
    }
}

修改
在同一年内相隔2个月或更长时间的工作,再次测试,情况就是这样,但是明年的日期不会

2 个答案:

答案 0 :(得分:1)

在你的PHP代码的第一部分,你已经把这个运算符>,但问题是它意味着,一切都小于1,而不是小于1或等于1的所有东西。简单的解决方案是将运算符更改为>=;这意味着所有等于1或小于1的东西。

答案 1 :(得分:0)

PHP中的date_diff构造吸吮猴子。更实际的是使用直接比较:

$dt1 = new \DateTime($_REQUEST['startdate']);
$dt2 = new \DateTime($_REQUEST['enddate']);
$dt1->add(new \DateInterval('P1M'));
echo ($dt1 < $dt2 ? 'Less' : 'More') . ' than a month';

另外请不要使用$_REQUEST,它可能存在严重的安全问题。您应该根据您明确的期望使用$_GET$_POST$_COOKIE