Разница между двумя временами с микросекундами в php

#php

#php

Вопрос:

Я вычисляю разницу во времени с точностью до миллисекунд в PHP.

Я попробовал часы, минуты и секунды. Как вычислить миллисекунды?

 $time1 = strtotime('8:01:13.225');
$time2 = strtotime('8:02:11.088');
$diff = $time2 - $time1;
$diffTime = date('H:i:s',$diff);
 

Я ожидаю, что результат $time2-$time1 будет 0:00:57.863

Ответ №1:

strtotime будет анализировать время с микросекундами, но игнорирует их. Из руководства:

Стали разрешаться 5.0.0 микросекунд, но они игнорируются.

Чтобы вычислить время с микросекундами, вы можете использовать DateTime и DateInterval объекты:

 $time1 = date_create_from_format('H:i:s.u', '8:01:13.225');
$time2 = date_create_from_format('H:i:s.u', '8:02:11.088');
$diff = $time2->diff($time1);
echo $diff->format('%H:%I:%s.%f');
 

Выходной сигнал:

 00:00:57.863000
 

Демонстрация на 3v4l.org

Обновить

Кажется, что некоторые версии PHP7 делают странные вещи с микросекундами, сохраняя их как отрицательное значение, что приводит к выводу

 00:00:58.-137000
 

Чтобы обойти это, вы можете использовать этот код:

 $time1 = date_create_from_format('H:i:s.u', '8:01:13.225');
$time2 = date_create_from_format('H:i:s.u', '8:02:11.088');
$diff = $time2->diff($time1);
// correct for weird microseconds behaviour
$secs = $diff->s   (float)$diff->format('%f') / 1000000;
echo $diff->format("%H:%I:$secs");
 

Демонстрация на 3v4l.org

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

1. да, это правильно, но я преуспеваю в phpfiddle. Разница в выходе

2. Я использую версию php: — 7.3.3

3. @rajan какой результат ты получаешь?

4. Проблема в версии, я получил вывод, подобный 00:00:58.%f; я проверяю свою версию php и повторяю, что она получила правильный вывод. Большое спасибо

5. @rajan Я внес обновление в код, который касается некоторого странного поведения в других версиях PHP7.

Ответ №2:

Способ сделать с DateTime объектом

 <?php
$time1 = new DateTime('8:01:13.225');
$time2 = new DateTime('8:02:11.088');
$interval = $time1->diff($time2);
echo $interval->format('%H:%I:%s.%f');
?>
 

ДЕМОНСТРАЦИЯ: https: //3v4l.org/AjOFD