Как отформатировать миллисекунды в минутах: секунды: миллисекунды в PHP?

У меня общее количество миллисекунд (т.е. 70370), и я хочу отображать его как минуты: секунды: миллисекунды, то есть 00: 00: 0000.

Как я могу это сделать в PHP?

Не попадайте в ловушку использования функций даты! То, что у вас здесь, – это временной интервал, а не дата. Наивный подход состоит в том, чтобы сделать что-то вроде этого:

date("h:i:su", $mytime / 1000) 

но поскольку функция даты используется для (gasp!) дат, она не обрабатывает время так, как вы хотели бы, чтобы она была в этой ситуации – во время форматирования даты / времени учитывались временные и дневные сбережения и т. д.

Вместо этого вы, вероятно, просто захотите сделать несколько простых математических вычислений:

 $input = 70135; $uSec = $input % 1000; $input = floor($input / 1000); $seconds = $input % 60; $input = floor($input / 60); $minutes = $input % 60; $input = floor($input / 60); // and so on, for as long as you require. 

Если вы используете PHP 5.3, вы можете использовать объект DateInterval :

 list($seconds, $millis) = explode('.', $milliseconds / 1000); $range = new DateInterval("PT{$seconds}S"); echo $range->format('%H:%I:%S') . ':' . str_pad($millis, 3, '0', STR_PAD_LEFT); 

Я считаю, что нет встроенной функции для форматирования miliseconds в PHP, вам нужно будет использовать математику.

Попробуйте эту функцию, чтобы отобразить количество миллисекунд так, как вам нравится:

 <?php function udate($format, $utimestamp = null) { if (is_null($utimestamp)) { $utimestamp = microtime(true); } $timestamp = floor($utimestamp); $milliseconds = round(($utimestamp - $timestamp) * 1000000); return date(preg_replace('`(?<!\\\\)u`', sprintf("%06u", $milliseconds), $format), $timestamp); } echo udate('H:i:s.u'); // 19:40:56.78128 echo udate('H:i:s.u', 654532123.04546); // 16:28:43.045460 ?> 

Источник

зачем беспокоиться о date() и форматировании, когда вы можете просто использовать математику? если $ms – ваше количество миллисекунд

 echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT); 

Как указано в руководстве:

u Microseconds (добавлено в PHP 5.2.2) Пример: 654321

У нас есть параметр «u» для функции date ()

Пример:

 if(($u/60) >= 60) { $u = mktime(0,($u / 360)); } date('H:i:s',$u);