Как добавить время из базы данных в laravel - PullRequest
0 голосов
/ 05 августа 2020
[
  {"duration":"00:01:46"},
  {"duration":"00:01:23"}, 
  {"duration":"00:01:56"},
  {"duration":"00:03:20"}, 
  {"duration":"00:05:41"},
  {"duration":"00:02:08"}
]
[
  {"duration":"00:01:32"},
  {"duration":"00:03:31"}, 
  {"duration":"00:05:56"},
  {"duration":"00:03:56"}, 
  {"duration":"00:03:47"},
  {"duration":"00:03:38"},
  {"duration":"00:02:26"}
]

Это продолжительность, которая исходит из продолжительности столбца моей базы данных, и теперь я хочу сложить / суммировать все это, чтобы я мог ее отобразить.

1 Ответ

0 голосов
/ 05 августа 2020

Используйте DateTime, его метод добавления с DateInterval.

<?php

$a = '[
  {"duration":"00:01:46"},
  {"duration":"00:01:23"}, 
  {"duration":"00:01:56"},
  {"duration":"00:03:20"}, 
  {"duration":"00:05:41"},
  {"duration":"00:02:08"}
]';

$b = '[
  {"duration":"00:01:32"},
  {"duration":"00:03:31"}, 
  {"duration":"00:05:56"},
  {"duration":"00:03:56"}, 
  {"duration":"00:03:47"},
  {"duration":"00:03:38"},
  {"duration":"00:02:26"}
]';

$dataA = json_decode($a);

$dataB = json_decode($b);

function sum(array $data): string {
  $sum = new DateTime('00:00');
  $start = new DateTime('00:00');
  foreach ($data as $row) {
    $parts = explode(':', $row->duration);
    $start->add(new DateInterval(sprintf('PT%sH%sM%sS', $parts[0], $parts[1], $parts[2])));
  }

  return $start->diff($sum)->format('%H:%I:%S');
}

var_dump(sum($dataA));
var_dump(sum($dataB));

Вывод:

string(8) "00:16:14"
string(8) "00:24:46"

Примечание: вам нужно будет отображать также дни, если ваша продолжительность составляет более 24 часов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...