PHP时间(小时和分钟)未正确添加

时间:2018-05-06 18:47:22

标签: php while-loop strtotime

我不是专业开发人员,所以如果这很明显,请不要把我击倒......

我在数据库中有一个表,我需要在一小时,几分钟和几秒内从一列中总计时间总和。我需要在PHP中进行计算以便在此事务之后进一步使用。

我在数据库中的时间格式如下:

01:30:00
01:00:00
00:00:00
00:00:00

我的代码是这样的:

date_default_timezone_set(UTC);
while($sql_row = mysqli_fetch_array($sql_query)){
$time = $sql_row['time'];
$total_time = strtotime("1970-01-01 ".$time)+strtotime("1970-01-01 ".$total_time);

echo date('H:i:s',$total_time)."<BR>";
    }

echo date('H:i',$total_time);

问题是输出显示它根本没有为前两行添加。然后对于00:00:00输入的所有行,我就这样得到12:00:00。 01:00:00 01:30:00 12:00:00 12:00:00

我已经摆弄了一千种方式,并且认为这与unix时间戳是当地时间+11/12小时有关。 (格林威治标准时间)。我尝试过使用date_default_timezone_set(UTC)但我得到了相同的结果。我希望在02:30:00看到这个循环值重复,因为最后一个值不应该为该值添加任何内容。

为了在没有循环的情况下测试这个,我尝试了这个:

date_default_timezone_set(UTC);
$date = date('Y-m-d');
$time1 = "01:00:00";
$time2 = "01:30:00";
$time3 = "00:00:00";

$total = strtotime($date." ".$time1)+strtotime($date." ".$time2)+strtotime($date." ".$time3);

echo date('H:i:s',$total);

这很好用!有些我认为while循环也会影响它但是我无法在PHP中的while循环中添加任何参考。

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:0)

使用datestringtotime的有趣方法。

我会在几秒钟内开枪。有点像...

$timings = array("01:30:00", "01:00:00", "60:00:00", "26:00:11");
$total_seconds = 0;
foreach ($timings as $time) 
{
    list($hours, $minutes, $seconds) = explode(':', $time);
    $total_seconds += $seconds + ($minutes * 60) + ($hours * 60 * 60);
}

$format     = sprintf('%02d:%02d:%02d', ($total_seconds / 3600), ($total_seconds / 60 % 60), $total_seconds % 60); 
$as_date    = date("Y-m-d H:i:s", $total_seconds);

echo "total seconds: ".$total_seconds ." | as date: ".$as_date." | formatted: ".$format;

答案 1 :(得分:0)

谢谢Ian,这很有用。我想我是从错误的角度来看这个。

我不得不稍微修改代码以使用while循环,因为foreach循环只生成数组的前两个值。

感谢您的帮助,非常感谢。

$total_seconds = 0;
while($testrow = mysqli_fetch_array($timings, MYSQLI_ASSOC)){
    list($hours, $minutes, $seconds) = explode(':', $testrow['time_dual']);
    $total_seconds += $seconds + ($minutes * 60) + ($hours * 60 * 60);
    echo $testrow['time_dual']."<br>";// For testing only
}

$format     = sprintf('%02d:%02d:%02d', ($total_seconds / 3600), ($total_seconds / 60 % 60), $total_seconds % 60); 
$as_date    = date("Y-m-d H:i:s", $total_seconds);

echo "total seconds: ".$total_seconds ." | as date: ".$as_date." | formatted: ".$format;