php 添加多个持续时间以获得总持续时间
php addition of multiple durations to get total duration
数据库中的开始时间和结束时间 table 使用 php 我正在计算开始时间和结束时间之间的差异以获得任务的总持续时间。
我正在使用以下方法:
foreach ($task->timers as $time ) {
$start_date = new DateTime($time->date.' '.$time->start_time);
$end_date = new DateTime($time->date.' '.$time->end_time);
$times[] = date_diff($end_date, $start_date);
}
然后我按如下方式循环遍历上面的数组;
foreach ($times as $timer) {
$minutes = strlen($timer->i);
if($minutes == 1) {
$minutes = '0'.$timer->i;
} else {
$minutes = $timer->i;
}
$o[] = $timer->h.':'.$minutes.':'.$timer->s;
}
然后我得到一个数组如下;
array(2) { [0]=> string(7) "0:54:17" [1]=> string(7) "0:01:26" }
现在我想将这两个值相加以获得总持续时间,我正在尝试按如下方式执行此操作;
$totalTime = array_sum($o);
但是返回结果为:
int(0);
知道如何计算两个持续时间的总持续时间吗??
不幸的是,array_sum
不适用于字符串,只能用于数值(因为 PHP 显然不知道如何对字符串进行数学运算)。你可以简单地这样加起来:
$hrs = 0;
$mins = 0;
$secs = 0;
foreach ($o as $time) {
// Let's take the string apart into separate hours, minutes and seconds
list($hours, $minutes, $seconds) = explode(':', $time);
$hrs += (int) $hours;
$mins += (int) $minutes;
$secs += (int) $seconds;
// Convert each 60 minutes to an hour
if ($mins >= 60) {
$hrs++;
$mins -= 60;
}
// Convert each 60 seconds to a minute
if ($secs >= 60) {
$mins++;
$secs -= 60;
}
}
现在 $mins
的值为 55,$secs
的值为 43。
您可以再次以任何需要的格式打印它们,例如:
echo sprintf('%d:%d:%d', $hrs, $mins, $secs);
这将导致 0:55:43
。
数据库中的开始时间和结束时间 table 使用 php 我正在计算开始时间和结束时间之间的差异以获得任务的总持续时间。
我正在使用以下方法:
foreach ($task->timers as $time ) {
$start_date = new DateTime($time->date.' '.$time->start_time);
$end_date = new DateTime($time->date.' '.$time->end_time);
$times[] = date_diff($end_date, $start_date);
}
然后我按如下方式循环遍历上面的数组;
foreach ($times as $timer) {
$minutes = strlen($timer->i);
if($minutes == 1) {
$minutes = '0'.$timer->i;
} else {
$minutes = $timer->i;
}
$o[] = $timer->h.':'.$minutes.':'.$timer->s;
}
然后我得到一个数组如下;
array(2) { [0]=> string(7) "0:54:17" [1]=> string(7) "0:01:26" }
现在我想将这两个值相加以获得总持续时间,我正在尝试按如下方式执行此操作;
$totalTime = array_sum($o);
但是返回结果为:
int(0);
知道如何计算两个持续时间的总持续时间吗??
不幸的是,array_sum
不适用于字符串,只能用于数值(因为 PHP 显然不知道如何对字符串进行数学运算)。你可以简单地这样加起来:
$hrs = 0;
$mins = 0;
$secs = 0;
foreach ($o as $time) {
// Let's take the string apart into separate hours, minutes and seconds
list($hours, $minutes, $seconds) = explode(':', $time);
$hrs += (int) $hours;
$mins += (int) $minutes;
$secs += (int) $seconds;
// Convert each 60 minutes to an hour
if ($mins >= 60) {
$hrs++;
$mins -= 60;
}
// Convert each 60 seconds to a minute
if ($secs >= 60) {
$mins++;
$secs -= 60;
}
}
现在 $mins
的值为 55,$secs
的值为 43。
您可以再次以任何需要的格式打印它们,例如:
echo sprintf('%d:%d:%d', $hrs, $mins, $secs);
这将导致 0:55:43
。