检查两个php DateTime对象之间的时差

时间:2016-04-12 08:52:19

标签: php datetime

我正在检查从数据库返回的两个时间戳之间的差异。这是我正在使用的代码:

$startDate = new \DateTime($last14[$item]->started);
$endDate = new \DateTime($last14[$item]->finished);
$interval = $startDate->diff($endDate);

这将返回DateInterval对象并且它是正确的。

现在问题是我需要计算所有出现的差异超过13小时。 13个小时的死亡是可以的,但需要13个小时1分钟。我创建了一个凌乱的嵌套if lump:

if ($interval->h > 12) {
    if ($interval->i > 0) {
        $count++;
    } else {
        if ($interval->h > 13) {
            $count++;
        }
    }   
}

这似乎有效,但我想知道是否有更好(更干净)的方法。我考虑过将时差转换为分钟而只是做:

if ($minutes > $minutesIn13Hours) {
    $count++;
}

但这是另一个转换步骤。

还有其他想法吗?

4 个答案:

答案 0 :(得分:3)

if ($interval->h * 60 + $interval->i > 13*60) {
    $count++;
}

答案 1 :(得分:0)

您将有更少的条件来检查您是否执行以下操作:

if ( ($interval->h * 100) + $interval->i > 1300 ) {
            $count++;
}

答案 2 :(得分:0)

我认为最干净,最具可读性和希望更快的做法是:

if (($interval->h > 12 && $interval->i > 0) || $interval->h > 13) {
  $count++;
}

尽管如此,我认为它不会比你的第一个解决方案快得多(如果它 更快......)。

P.S。:或许@RST解决方案会更快一点,但是,既然你要求更清洁的解决方案,那肯定会更清楚......

答案 3 :(得分:0)

或者只是将13个小时添加到开始日期,然后与结束日期进行比较。

if($endDate > $startDate->add(new DateInterval('PT13H'))) {
    $count++; // got it
}

更干净,可读,更可靠,更安全。可能比差异更好(速度快),顺便说一句。