比所需时间多两个小时

时间:2016-01-08 14:26:09

标签: php

我的格式是“hh:mm:ss”。 我正在做所有那些时间的总和。但在这里,我得到的时间超过了要求两个小时。那么,实际问题在哪里。 我的代码就像,

foreach($result as $key=>$value)
{
    $total_markin_time[] = date('H:i:s',  strtotime($value['clock_in']));
}

获得结果,

00:33:41
16:15:22
11:06:59
11:03:59
11:13:38
15:43:34
11:29:35

foreach ( $total_markin_time as $time )
                {
                    list( $g, $i, $s ) = explode( ':', $time );
                    //echo $g."-";
                    $total_markin_seconds += $g * 60 * 60;
                    $total_markin_seconds += $i * 60;
                    $total_markin_seconds += $s;
                }

                //echo $total_markin_seconds; exit;

                $total_markin_hours    = floor( $total_markin_seconds / 3600 );
                $total_markin_seconds -= $total_markin_hours * 3600;
                $total_markin_minutes  = floor( $total_markin_seconds / 60 );
                $total_markin_seconds -= $total_markin_minutes * 60;

当我对此进行总结时,我得到结果77:26:48。 问题出在哪儿? 的更新 我读过的floor是否有任何问题,

The floor() function rounds a number DOWN to the nearest integer, if necessary.

2 个答案:

答案 0 :(得分:2)

没有错误,它运作正常 计算:
小时:0 + 16 + 11 + 11 + 11 + 15 + 11 = 75小时
分钟:33 + 15 + 6 + 3 + 13 + 43 + 29 = 142 = 2小时22分钟 秒:41 + 22 + 59 + 59 + 38 + 34 + 35 = 288 = 4分48秒 总和的结果是77:26:48。

如果你想得到几个小时的总和,你应该使用这样的东西

foreach ( $total_markin_time as $time )
                {
                    list( $g, $i, $s ) = explode( ':', $time );
                    $total_markin_hours += $g;
                }

答案 1 :(得分:1)

这很简单。所有时间都增加到:

288 s = 4m 48s
142 m = 2h 22m
75 h

结果(加上小时+分钟+秒)得出77:26:48

您可能认为您只添加了几分钟和几秒钟的小时数,但您必须添加分钟和秒的溢出。