我尝试用MySQL 00:00:00的格式对小时求和,我用一个foreach对它们求和,但是当和达到24:00:00时,它从00:00:00开始,我希望和遵循到24:10:00,25:00:00,等等。
下面是我的求和代码:
foreach($hours as $h){
$sumaHoras = date('H:i:s', strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00'));
}发布于 2017-08-04 00:41:18
问题是,由于只返回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()返回的小时数为false,而这些小时本应该滚动到天,比如25:00,所以如果你得到一个这样的输入,它将变成0- strtotime('00:00'),你最终会得到一个巨大的负值。但是如果所有的输入都在00-23:00-59之间,这应该是可以的。
发布于 2017-08-04 19:12:15
我认为这段代码很有帮助
foreach ($timeArr $key=> $timevalue) {
$timesumArr[$key]=date('H:i:s', array_sum(array_map('strtotime', $timevalue)));
}https://stackoverflow.com/questions/45489241
复制相似问题