математика — php добавление нескольких длительностей для получения общей продолжительности

время начала и время окончания в таблице базы данных с использованием 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);

Любые идеи, как я могу рассчитать общую продолжительность двух длительностей?

3

Решение

к несчастью 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,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]