获取包含多个时间值的两个数组之间的时间差


Getting time difference between two arrays containing multiple time values

我使用两个查询将时间值收集到两个单独的数组中。我颠倒了数组的顺序我想用一个数组的第一个值减去第二个数组的第一个值,用第二个值减去第二个值,用第三个值减去第三个值,等等。我想以分钟为单位显示两个数组之间的差异。有人知道怎么做吗?

下面是我的代码:
$sql1 = "SELECT log_time FROM log_table WHERE client_name = 'opus' AND server_protocol = '638'";
$query = $this->db->prepare($sql1);
$query->execute();
$Tim1 = $query->fetchAll();
$Tim1 = array_reverse($Tim1);
$sql2 = "SELECT log_time FROM log_table WHERE client_name = 'opus' AND server_protocol = '22'";
$query = $this->db->prepare($sql2);
$query->execute();
$Tim2 = $query->fetchAll();
$Tim2 = array_reverse($Tim2);
for ($x=0; $x<count($Tim1); $x++) {
    $result = date_diff($Tim1[0], $Tim2[0]);
}

当我print_r数组值时,它们看起来像这样:

print_r($Tim1);
print_r($Tim2);
Array ( [0] => stdClass Object ( [log_time] => 13:08:29 ) [1] => stdClass Object ( [log_time] => 12:15:45 ) [2] => stdClass Object ( [log_time] => 11:40:00 ) [3] => stdClass Object ( [log_time] => 09:31:46 ) ) 
Array ( [0] => stdClass Object ( [log_time] => 13:51:55 ) [1] => stdClass Object ( [log_time] => 12:29:19 ) [2] => stdClass Object ( [log_time] => 12:12:02 ) [3] => stdClass Object ( [log_time] => 09:36:48 ) ) 
print_r($result);

差异应该在94分钟左右。当我print_r($result)我得到一个警告说"date_diff()期望参数1是DateTimeInterface, object given…"。有人知道为什么会这样吗?

通过循环每次访问数组的相同元素,并且您覆盖了$result而不是累积差异。试一试:

$result = 0;
for ($x=0; $x<count($Tim1); $x++) {
    $result += (strtotime($Tim1[$x]->log_time) - strtotime($Tim2[$x]->log_time));
}

$result将是以秒为单位的时间差之和。