如何将毫秒数量格式化为分钟:秒:PHP中的毫秒数?

问题描述 投票:13回答:7

我有总毫秒数(即70370),我想将其显示为分钟:秒:毫秒,即00:00:0000。

我怎么能用PHP做到这一点?

php date time-format
7个回答
33
投票

不要陷入使用日期功能的陷阱!你在这里有一个时间间隔,而不是一个日期。天真的方法是做这样的事情:

date("h:i:s.u", $mytime / 1000)

但由于日期函数用于(喘气!)日期,因此在格式化日期/时间时,它不会按照您希望的方式处理时间 - 它需要考虑时区和夏令时等。

相反,你可能只想做一些简单的数学:

$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.

4
投票

如果您使用的是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);

1
投票

我相信在PHP中没有用于格式化毫秒的内置函数,你需要使用数学。


1
投票

尝试使用此函数以您喜欢的方式显示毫秒数:

<?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
?>

Source


1
投票

当你可以使用数学时,为什么还要用date()和格式化呢?如果$ms是你的毫秒数

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

0
投票

如手册中所述:

u微秒(在PHP 5.2.2中添加)示例:654321

我们有一个'u'参数用于date()函数

例:

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

0
投票

将毫秒转换为格式化时间

<?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

© www.soinside.com 2019 - 2024. All rights reserved.