我的数据库字段中的时间或持续时间的SUM有问题。
假设。我有5条记录
1. 00:25:32
2. 00:08:52
3. 00:33:22
4. 00:25:30
5. 00:15:12
遍数 php
.我花了很多时间,但失败了。
我已经尝试了这一点。
$time = "00:58:30";
$time2 = "00:12:35";
$secs = strtotime($time2)-strtotime("00:00:00");
$result = date("H:i:s",strtotime($time)+$secs);
echo $result;
但它不工作良好的多个记录
谢谢大家。我已经解决了。我在Stackoverflow上查看了一些其他问题,我得到了我想要的答案。
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`SongDuration`))) AS `TimeSum` FROM `mu_forms_competition_entries`
持续时间不是日期。明天在35:00:00是什么意思?
最接近的内置功能是 日期间隔但为了按原样使用它,你的输入数据需要重写一些内容('00:25:32'
变成 'PT00H25M32S'
),反正我觉得它不支持加法。
自己进行计算并不难(为了简洁起见,省略了错误检查和负倍数)。
function timeToSeconds(string $time): int
{
[$h, $m, $s] = explode(':', $time);
return $s + 60 * $m + 3600 * $h;
}
function secondsToTime(int $seconds): string
{
return sprintf(
"%02d:%02d:%02d",
floor($seconds / 3600),
floor(($seconds / 60) % 60),
$seconds % 60
);
}
$times = [
'00:25:32',
'00:08:52',
'00:33:22',
'00:25:30',
'00:15:12',
];
$total = 0;
foreach ($times as $time) {
$total += timeToSeconds($time);
}
echo secondsToTime($total);
如果你允许改变数据库查询,可能会有一个内置的功能,可以直接从SQL转换为秒。例如,MySQL有 TIME_TO_SEC().
最后但并非最不重要的是,如果你的数据库真的有一个 Time
列类型,也许它允许 SUM()
它。