检查日期是否在PHP的特定日期范围内

时间:2014-12-04 17:16:04

标签: php cakephp

我正在尝试这个,因为我上次使用PHP进行编码已经有一段时间了。

我有一个函数可以检查给定的日期是否在日期范围之间:

pr($this->isDateBetween("2014-11-15", "2014-12-05", "2014-06-14"));

public function isDateBetween($dt_start, $dt_check, $dt_end){
        if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){
            return true;
        } else{
            return false;
        }
    }

但似乎我得到了false。预期结果应为true,因为2014-12-05小于2014-06-14

12月小于6月所以这应该是真的吗?

另外, 当我将2014-06-14更改为2014-12-14时,它就成了现实。

抱歉,我不再使用PHP更新了。请耐心等待。

EDITS

尝试将这些转换为strtotime但仍然得到错误的结果

3 个答案:

答案 0 :(得分:0)

解决方案存在于此处:

How to check if a date is in a given range?

<强> SOLUTION:

将它们转换为时间戳是可行的,使用strtotime,例如。

$start_date = '2009-06-17';

$end_date = '2009-09-05';

$date_from_user = '2009-08-28';

check_in_range($start_date, $end_date, $date_from_user);


function check_in_range($start_date, $end_date, $date_from_user)
{
  // Convert to timestamp
  $start_ts = strtotime($start_date);
  $end_ts = strtotime($end_date);
  $user_ts = strtotime($date_from_user);

  // Check that user date is between start & end
  return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
}

答案 1 :(得分:0)

  

预期结果应为真,因为2014-12-05低于2014-06-14。

完全错了。代码 IS 正在运行。 6月14日是&#34; less&#34;比12月12日。因此,您的12月12日日期在开始/结束日期之间。它超过了范围的终点。

答案 2 :(得分:0)

  

预期结果应为真,因为2014-12-05低于2014-06-14。

绝对不是。预期结果不是true。它是false,因为"2014-12-05"不小于"2014-06-14"。十二月不到六月?从来没有听说过这种奇特的逻辑。

  

此外,当我将2014-06-14更改为2014-12-14时,它变为现实。

那是对的。由于"2014-12-05"肯定小于"2014-12-14",因此它是true5 December明显小于14 December

这与PHP版本或PHP内置方法无关。这完全取决于你的逻辑。

我认为这是你正在寻找的东西:

pr($this->isDateBetween("2014-06-14", "2014-11-15", "2014-12-05"));

public function isDateBetween($dt_start, $dt_check, $dt_end){
        if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){
            return true;
        } else{
            return false;
        }
}

这将返回true