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

发布于 2024-08-12 18:08:55 字数 79 浏览 7 评论 0原文

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

我怎样才能在 PHP 中做到这一点?

I have a total ammount of milliseconds (ie 70370) and I want to display it as minutes:seconds:milliseconds ie 00:00:0000.

How can I do this in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

情绪操控生活 2024-08-19 18:08:55

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

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

Don't fall into the trap of using date functions for this! What you have here is a time interval, not a date. The naive approach is to do something like this:

date("H:i:s.u", $milliseconds / 1000)

but because the date function is used for (gasp!) dates, it doesn't handle time the way you would want it to in this situation - it takes timezones and daylight savings, etc, into account when formatting a date/time.

Instead, you will probably just want to do some simple maths:

$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.
他不在意 2024-08-19 18:08:55

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

If you are using PHP 5.3 you can make use of the DateInterval object:

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);
太阳哥哥 2024-08-19 18:08:55

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

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

why bother with date() and formatting when you can just use math ?
if $ms is your number of milliseconds

echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT);
泛滥成性 2024-08-19 18:08:55

将毫秒转换为格式化时间

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

convert milliseconds to formatted time

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

check demo here :
https://www.phprun.org/qCbY2n

浸婚纱 2024-08-19 18:08:55

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

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

来源

Try this function to display amount of milliseconds the way you like:

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

冰雪梦之恋 2024-08-19 18:08:55

正如手册中提到的:

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

我们为 date() 函数提供了一个“u”参数

示例:

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

As mentioned in the manual:

u Microseconds (added in PHP 5.2.2)
Example: 654321

We have a 'u' parameter for the date() function

Example:

if(($u/60) >= 60)
{
$u = mktime(0,($u / 360));
}
date('H:i:s',$u);
风透绣罗衣 2024-08-19 18:08:55

不,你可以使用 CarbonInterval:

use Carbon\CarbonInterval;
...
$actualDrivingTimeString = CarbonInterval::seconds($milliseconds/1000)
  ->cascade()->format('%H:%I:%S');
...

瞧,你就完成了

no, you can use CarbonInterval:

use Carbon\CarbonInterval;
...
$actualDrivingTimeString = CarbonInterval::seconds($milliseconds/1000)
  ->cascade()->format('%H:%I:%S');
...

voila, and you are done

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文