#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
Обновить
Кажется, что некоторые версии 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");
Комментарии:
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