Количество отработавших часов с 3 цифрами

#php #laravel #php-carbon

#php #laravel #php-углерод

Вопрос:

У меня есть приложение, которое считает часы из нескольких записей. Теперь я обнаруживаю ситуацию, если часы возвращают мне более 2 цифр.

Например, у меня есть $total = '102:00:00' с 3 цифрами, он возвращает мне эти ошибки:

 A two digit minute could not be found
  

Ошибка возникает, когда я пытаюсь сделать это: Carbon::createFromFormat('H:i:s', $total);

Как я могу это решить?

Спасибо

Комментарии:

1. Вы хотите создать дату или продолжительность?

2. Итог выглядит как измерение продолжительности времени, а не как дата. Вы ожидаете измерения продолжительности времени или даты?

3. Мне нужна временная метка из этих часов @DelenaMalan

4. Какую временную метку вы ожидаете от 102 часов?

5. Что мне нужно, так это суммировать 102:00:00 часов с 05:00:00 и вернуть это значение. До сих пор то, что я делаю, это createFromFormat каждого часа, суммируя как timestamp, так и createFromTimestamp с этим значением. возможно, я усложняю @DelenaMalan

Ответ №1:

Я думаю, вам не следует путать фактическую дату (время) и временной интервал. Функция, ориентированная на дату и время, вам не поможет. Просто создайте свою собственную функцию для добавления двух длительностей. Смотрите (псевдо-) код ниже

 function add_duration($h1,$m1,$s1,$h2,$m2,$s2)
{
  $s3 = ($s1   $s2)%60;
  $m3 = ($m1   $m2   floor(($s1   $s2)/60))%60;
  $h3 = $h1   $h2   floor(($m1   $m2   floor(($s1   $s2)/60))/60);
  return [$h3,m3,s3];
}
  

Ответ №2:

Вот мое предположение:

 $time1 = '05:00:00';
$time2 = '120:00:00';
$components1 = explode(':', $time1);
$components2 = explode(':', $time2);
$diff = ($components2[0] * 3600   $components2[1] * 60   $components2[2]) - ($components1[0] * 3600   $components1[1] * 60   $components1[2]);
$total = floor($diff / 3600) . gmdate(":i:s", $diff % 3600);