如何在PHP中比较两个日期时间间隔?

时间:2018-03-18 00:42:14

标签: php

我想比较两个日期时间的间隔,看看时间间隔是过去,将来还是现在。

$current_time = new DateTime();
$datetime1 = new DateTime('2018-03-17 18:25:00'); 
$datetime2 = new DateTime('2018-03-17 20:00:00');

if($current_time >= $datetime1 && $current_time <= $datetime2){
   // now
} elseif($current_time >= $datetime1){
   // past
} elseif($current_time <= $datetime1){
   // future
}

编辑: 对不起,刚刚意识到发布我的整个真实代码会让每个人都更容易。

上面的示例确实有效,但是当我使用多个间隔从那里循环数据时它不起作用

function interval(){ 

    ....

    while($row = $result->fetch_assoc()){
      $start_time = $row['start_time'];
      $end_time = $row['end_time'];

      $now = new DateTime();
      $datetime1 = new DateTime($start_time);
      $datetime2 = new DateTime($end_time);

        if($now >= $datetime1 && $now <= $datetime2){
          // now
        }elseif($now < $datetime1 && $now < $datetime2){
          // past
        }elseif($now > $datetime1 && $now > $datetime2){
          // future
        }else{
          // fail?
        }
     }
  }

3 个答案:

答案 0 :(得分:0)

date返回一个字符串。如果您确实想要使用真正的DateTime对象,那么您需要执行以下操作:

$now = new DateTime();
$other = new DateTime('2018-03-18 17:45:00'); //note: example made off the top of my head... value presented may not work

if ($now < $other) {
    //do something
}

可以在PHP手册中找到更多信息:https://secure.php.net/manual/en/class.datetime.php

答案 1 :(得分:0)

由于你的日期已经是字符串,只需将它们比作那样

$current_time = date("Y-m-d H:i:s");
$datetime1 = '2018-03-17 18:25:00'; 
$datetime2 = '2018-03-17 20:00:00';

if($current_time >= $datetime1 && $current_time <= $datetime2){
   // now
} elseif($current_time >= $datetime1){
   // past
} elseif($current_time <= $datetime1){
   // future
}

答案 2 :(得分:0)

您能否扩展代码无法正常运行的原因? 以下是我将如何处理这个问题。

date_default_timezone_set('UTC');
$current_time = new DateTime();
$compareWith = new DateTime('2018-03-16 18:25:00');


if ($current_time >= $compareWith) {
    //whatever your heart desires
}
else{
    //whatever your heart desires
}