【问题标题】:Get total hours and minutes from sum of time difference in php [duplicate]从php中的时间差总和获取总小时和分钟[重复]
【发布时间】:2019-09-02 01:18:08
【问题描述】:

我有一个表来存储这样的机器启动和停止记录

 ---------------------------------------
|   machine_start   |   machine_stop    |
 ---------------------------------------
|       11:00 AM    |       11:00 PM    |
 ---------------------------------------
|       12:00 AM    |       01:00 PM    |
 ---------------------------------------

现在我想通过首先获取 machine_stop 和 machine_start 时间之间的差值来获取机器总运行时间,然后循环遍历表记录以获得总时间。

这里我试过了

$machine_total_time = 0;
foreach ($machine_data as $data){
    $machine_total_time += strtotime($data->machine_stop) - strtotime($data->machine_start);
}
var_dump(date("H:i", $machine_total_time));

它将显示 'H' 的最高 23 小时。我想显示 $machine_total_time 的总小时数和分钟数。怎么做。谢谢。

【问题讨论】:

  • 如果机器从11 AM 开始并在两天后在4 PM 停止会发生什么?没有日期,您将不知道它运行了多长时间。
  • :) 好问题。从你的角度来看,你是对的。但这只是一个例子,以便我理解基本问题。
  • @Joni 他必须将秒转换为小时,你链接的不是操作想要的
  • stackoverflow.com/questions/3172332/… 可能重复这个问题在这个网站上已经被问过几十次了,如果不是上百次的话
  • 您的代码很好,您只需使用副本中描述的方法之一来输出您的时间。

标签: php


【解决方案1】:

你可以使用gmdate()函数:

$minsec = gmdate("i:s", $machine_total_time); 
$hours = gmdate("d", $machine_total_time)*24 + gmdate("H", $machine_total_time);

$time = $hours . ':' . $minsec; // 56:12:12

【讨论】:

  • 试过但没用。 :)
  • 你有什么价值?
  • 如果我只打印没有 gmdate 或日期,那么它显示 90000 或使用这两个函数它显示 01:00:00
  • 我的错,24 小时后重置,但我改进了我的答案。
【解决方案2】:

运行这段代码,总输出应该是25小时,

$machine_total_time = 0;
foreach ($machine_data as $data) {
    $time1    = new DateTime(date("H:i:s", strtotime($data['machine_stop'])));
    $time2    = new DateTime(date("H:i:s", strtotime($data['machine_start'])));
    $interval = $time1->diff($time2);
    $machine_total_time += $interval->h;
}
echo $machine_total_time;

interval documentation 请参阅查看从区间获取数据的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多