在PHP上的总和时间

时间:2017-08-03 15:57:32

标签: php

我想用MySQL 00:00:00的格式来计算小时数,我将它们与foreach相加,但当总和达到24:00:00时,它开始于00:00:00,我想要跟随24:10:00,25:00等的总和

这是我的代码来总结它们:

foreach($hours as $h){
 $sumaHoras = date('H:i:s', strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00'));
}

2 个答案:

答案 0 :(得分:1)

问题是只返回date()的小时部分,你要删除大于的东西 一整天,所以它只会在00:00到23:59之间返回一些东西。你应该使用除了之外的东西 date(),仅当所有秒数都加起来时。

所以你应该尝试这样的事情:

function sec2hours($seconds){
  $units = array(
    'hours'   => 3600,
    'minutes' => 60,
    'seconds' => 1,
  );
  foreach($units as &$unit){
    $quot  = intval($seconds / $unit);
    $seconds -= $quot * $unit;
    $unit  = $quot;
  }
  $str = array();
  foreach($units as $name => $value){
    $str[] = ($value === 0?'00':$value);
  }
  return implode(':',$str);
}

$sum = 0;
foreach($hours as $h){
 $sum += strtotime($h->horas) - strtotime('00:00');
}
$sumaHoras = sec2hours($sum);

第二个问题是strtotime()在应该延迟到25:00的几个小时内返回false, 因此,如果您得到一个这样的输入,它将变为0 - strtotime(' 00')并且您最终得到巨大的负数。 但如果所有输入都在00-23:00-59之间,它应该没问题。

答案 1 :(得分:0)

我觉得这段代码很有用

        foreach ($timeArr $key=> $timevalue) {

            $timesumArr[$key]=date('H:i:s', array_sum(array_map('strtotime', $timevalue)));

        }