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

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

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

7 ответов


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

date("h:i:s.u", $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


Я считаю, что нет встроенной функции для форматирования миллисекунд в 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 микросекунды (добавлено в PHP 5.2.2) Например: 654321

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

пример:

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

преобразование миллисекунд в форматированное время

<?php
/* Write your PHP code here */
$input = 7013512333;

$uSec = $input % 1000;
$input = floor($input / 1000);

$seconds = $input % 60;
$input = floor($input / 60);

$minutes = $input % 60;
$input = floor($input / 60);

$hour = $input ;

echo sprintf('%02d %02d %02d %03d', $hour, $minutes, $seconds, $uSec);
?>

проверить демо здесь : https://www.phprun.org/qCbY2n