【问题标题】:Getting time difference between two arrays containing multiple time values获取包含多个时间值的两个数组之间的时间差
【发布时间】:2014-05-29 05:00:20
【问题描述】:

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

这是我的代码:

$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($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,给定对象..."。有谁知道为什么会这样?

【问题讨论】:

  • $TimOne$TimeTwo 不是数组,它们是来自 $Tim1$Tim2 的最后一个元素的值。每次通过 foreach 循环时,您都会覆盖变量,而不是推入数组。
  • 顺便说一句,在遍历数组时,您应该使用$x &lt; count($array),而不是&lt;=。否则,您将尝试访问数组的末尾。
  • 您需要使用date_diff 来获取两个日期之间的差异。您正在减去字符串,只需使用初始数字部分(即小时)将它们转换为数字。
  • @Barmar - 谢谢 Barmar。我把它清理了一下,只需要对 date_diff 做一些研究。

标签: php arrays time subtraction


【解决方案1】:

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

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

$result 将是时间差的总和,以秒为单位。除以 60 得到分钟。

【讨论】:

  • $result/60 = 94.066666666667。谢谢,这太棒了。
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多