首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php上的总计小时数

问在php上的总计小时数
EN

Stack Overflow用户
提问于 2017-08-03 23:57:32
回答 2查看 122关注 0票数 1

我尝试用MySQL 00:00:00的格式对小时求和,我用一个foreach对它们求和,但是当和达到24:00:00时,它从00:00:00开始,我希望和遵循到24:10:00,25:00:00,等等。

下面是我的求和代码:

代码语言:javascript
复制
foreach($hours as $h){
 $sumaHoras = date('H:i:s', strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00'));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-04 00:41:18

问题是,由于只返回date()的小时部分,您将删除大于一整天的所有内容,因此它将只返回00:00到23:59之间的内容。您应该使用date()以外的值,并且仅当所有秒数相加时才能使用。

因此,您应该尝试如下所示:

代码语言:javascript
复制
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()返回的小时数为false,而这些小时本应该滚动到天,比如25:00,所以如果你得到一个这样的输入,它将变成0- strtotime('00:00'),你最终会得到一个巨大的负值。但是如果所有的输入都在00-23:00-59之间,这应该是可以的。

票数 1
EN

Stack Overflow用户

发布于 2017-08-04 19:12:15

我认为这段代码很有帮助

代码语言:javascript
复制
        foreach ($timeArr $key=> $timevalue) {

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

        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45489241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档