我正在尝试使用 MySQL 格式
00:00:00
来计算小时数。我试图用 foreach()
对它们求和,但是当总和达到 24:00:00
时,它会在 00:00:00
重新开始。 我需要总数可能大于 24 小时。
这是我对它们求和的代码:
foreach ($hours as $h) {
$sumaHoras = date(
'H:i:s',
strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00')
);
}
问题是,仅返回 date() 的小时部分,您将删除大于的任何内容 一整天,因此它只会返回 00:00 到 23:59 之间的内容。你应该使用除 date() 并且仅当所有秒数相加时。
所以你应该尝试这样的事情:
function sec2hours($seconds){
$units = array(
'hours' => 3600,
'minutes' => 60,
'seconds' => 1,
);
foreach($units as &$unit){
$quot = intval($seconds / $unit);
$seconds -= $quot * $unit;
$unit = $quot;
}
$str = array();
foreach($units as $name => $value){
$str[] = ($value === 0?'00':$value);
}
return implode(':',$str);
}
$sum = 0;
foreach($hours as $h){
$sum += strtotime($h->horas) - strtotime('00:00');
}
$sumaHoras = sec2hours($sum);
第二个问题是 strtotime() 在本应滚动到 25:00 等天的时间上返回 false, 所以如果你得到这样的一个输入,它将变成 0 - strtotime('00:00') 并且你最终会得到一个巨大的负和。 但如果所有输入都在 00-23:00-59 之间,应该没问题。
我认为这段代码很有帮助
foreach ($timeArr $key=> $timevalue) {
$timesumArr[$key] = date(
'H:i:s',
array_sum(array_map('strtotime', $timevalue))
);
}