我想用MySQL 00:00:00的格式来计算小时数,我将它们与foreach相加,但当总和达到24:00:00时,它开始于00:00:00,我想要跟随24:10:00,25:00等的总和
这是我的代码来总结它们:
foreach($hours as $h){
$sumaHoras = date('H:i:s', strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00'));
}
答案 0 :(得分:1)
问题是只返回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-23:00-59之间,它应该没问题。
答案 1 :(得分:0)
我觉得这段代码很有用
foreach ($timeArr $key=> $timevalue) {
$timesumArr[$key]=date('H:i:s', array_sum(array_map('strtotime', $timevalue)));
}