我正在检查从数据库返回的两个时间戳之间的差异。这是我正在使用的代码:
$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++;
}
但这是另一个转换步骤。
还有其他想法吗?
答案 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
}
更干净,可读,更可靠,更安全。可能比差异更好(速度快),顺便说一句。