Php 比要求的时间多出两个小时

Php 比要求的时间多出两个小时,php,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

我以“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.

很简单。您的所有时间都会增加:

288 s = 4m 48s
142 m = 2h 22m
75 h
结果(加上小时+分钟+秒)是77:26:48


你可能认为你只增加了独立于分和秒的小时,但你必须增加分和秒的溢出量。

这很简单。您的所有时间都会增加:

288 s = 4m 48s
142 m = 2h 22m
75 h
结果(加上小时+分钟+秒)是77:26:48


您可能认为您只添加了独立于分和秒的小时,但您必须添加分和秒的溢出。

没有错误,它工作正常。
计算:
小时数: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;
                }

没有错误,它工作正常。
计算:
小时数: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;
                }

谢谢@Sylvester:但是我怎么能得到这个呢?谢谢@Sylvester:但是我怎么能得到这个呢?我就是这么想的。我们不应该把$g*60*60放在四个小时吗?@ViralBhoot如果你只需要小时的总和,你就没有必要把小时转换成秒。如果你需要在转换的时候考虑分钟和秒。我们不应该把G** 60×60小时四小时吗?@ ViralBhoot,如果你只需要一个小时的时间,你不需要把时间转换成秒。在转换过程中,你需要考虑分钟和秒。