【问题标题】:Calculate time elapsed in php - spans over 24 hours计算 php 中经过的时间 - 跨越 24 小时
【发布时间】:2013-12-29 11:20:25
【问题描述】:

我想要做的是将跨越 24 小时的小时/分钟/秒相加,例如:

12:39:25
08:22:10
11:08:50
07:33:05

我希望它返回的是“39:43:30”而不是 1970 年的日期。下面是我当前使用的代码(注意 - 它来自一个类,而不仅仅是一个函数)。

private function add_time($time1, $time2)
{
$first_exploded = explode(":", $time1);
$second_exploded = explode(":", $time2);
$first_stamp = mktime($first_exploded[0],$first_exploded[1],$first_exploded[2],1,1,1970);
$second_stamp = mktime($second_exploded[0],$second_exploded[1],$second_exploded[2],1,1,1970);
$time_added = $first_stamp + $second_stamp;
$sum_time = date("H:i:s",$time_added);
return $sum_time;
}

任何建议将不胜感激。

【问题讨论】:

    标签: php datetime time add


    【解决方案1】:

    日期函数总是围绕/与日/月/年一起工作。 你想要的是一个简单的数学函数,没有测试,但应该说清楚。

    private function add_time($base, $toadd) {
         $base = explode(':', $base);
         $toadd = explode(':', $toadd);
    
         $res = array();
         $res[0] = $base[0] + $toadd[0];
         $res[1] = $base[1] + $toadd[1];
         $res[2] = $base[2] + $toadd[2];
         // Seconds
         while($res[2] >= 60) {
             $res[1] += 1;
             $res[2] -= 60;
         }
         // Minutes
         while($res[1] >= 60) {
             $res[0] += 1;
             $res[1] -= 60;
         }
         return implode(':', $res);
    }
    

    【讨论】:

      【解决方案2】:

      这是一个不错的小函数,可以将数组中传递的任意次数相加:-

      function addTimes(Array $times)
      {
          $total = 0;
          foreach($times as $time){
              list($hours, $minutes, $seconds) = explode(':', $time);
              $hour = (int)$hours + ((int)$minutes/60) + ((int)$seconds/3600);
              $total += $hour;
          }
          $h = floor($total);
          $total -= $h;
          $m = floor($total * 60);
          $total -= $m/60;
          $s = floor($total * 3600);
          return "$h:$m:$s";
      }
      

      像这样使用它:-

      $times = array('12:39:25', '08:22:10', '11:08:50', '07:33:05',);
      var_dump(addTimes($times));
      

      输出:-

      string '39:43:30' (length=8)
      

      【讨论】:

      • 这更适合我尝试做的事情,因为它们通常是要添加的 7 倍,所有这些都已经在一个数组中 - 节省了我运行另一个 foreach 循环:-)。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      相关资源
      最近更新 更多