我不是专业开发人员,所以如果这很明显,请不要把我击倒......
我在数据库中有一个表,我需要在一小时,几分钟和几秒内从一列中总计时间总和。我需要在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循环中添加任何参考。
提前感谢您提供任何帮助
答案 0 :(得分:0)
使用date
和stringtotime
的有趣方法。
我会在几秒钟内开枪。有点像...
$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;