首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - Convert毫秒到小时:分钟: Seconds.fractional

问PHP - Convert毫秒到小时:分钟: Seconds.fractional
EN

Stack Overflow用户
提问于 2011-01-22 04:49:27
回答 4查看 40.1K关注 0票数 18

我有一个脚本,它以秒为单位接受一个值(到小数点后的两个小数点):

代码语言:javascript
复制
$seconds_input = 23.75

然后我将其转换为毫秒:

代码语言:javascript
复制
$milliseconds = $seconds_input * 1000; // --> 23750

然后我想这样格式化它:

代码语言:javascript
复制
H:M:S.x // --> 0:0:23.75

其中'x‘是第二位的分数(不管小数点后有多少位)。

有什么帮助吗?我似乎不能把我的思想包裹在这上面。我尝试使用gmdate(),但它一直在截取小数秒。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-22 05:19:58

我的观点

代码语言:javascript
复制
function formatSeconds( $seconds )
{
  $hours = 0;
  $milliseconds = str_replace( "0.", '', $seconds - floor( $seconds ) );

  if ( $seconds > 3600 )
  {
    $hours = floor( $seconds / 3600 );
  }
  $seconds = $seconds % 3600;


  return str_pad( $hours, 2, '0', STR_PAD_LEFT )
       . gmdate( ':i:s', $seconds )
       . ($milliseconds ? ".$milliseconds" : '')
  ;
}

然后测试

代码语言:javascript
复制
$testData = array(
    23,              // Seconds, w/o millis
    23.75,           // Seconds, w/millis
    23.75123456789,  // Lots of millis
    123456789.75    // Lots of seconds
);

foreach ( $testData as $seconds )
{
  echo formatSeconds( $seconds ), PHP_EOL;
}

哪一项会产生

代码语言:javascript
复制
00:00:23
00:00:23.75
00:00:23.75123456789
34293:33:09.75
票数 20
EN

Stack Overflow用户

发布于 2011-01-22 04:52:54

编辑:嗯,我有点草率。这里有一种方法可以满足你的要求:

代码语言:javascript
复制
function formatMilliseconds($milliseconds) {
    $seconds = floor($milliseconds / 1000);
    $minutes = floor($seconds / 60);
    $hours = floor($minutes / 60);
    $milliseconds = $milliseconds % 1000;
    $seconds = $seconds % 60;
    $minutes = $minutes % 60;

    $format = '%u:%02u:%02u.%03u';
    $time = sprintf($format, $hours, $minutes, $seconds, $milliseconds);
    return rtrim($time, '0');
}
票数 28
EN

Stack Overflow用户

发布于 2011-01-22 05:17:54

我的可读性要差得多,所以它必须更好。:p

基本上和@ircmaxell的版本是一样的。它确实会修剪尾随的‘0’,甚至会跳过最后一个‘’。如果毫秒为0,则使用分隔符。

代码语言:javascript
复制
<?

function format_period($seconds_input)
{
  $hours = (int)($minutes = (int)($seconds = (int)($milliseconds = (int)($seconds_input * 1000)) / 1000) / 60) / 60;
  return $hours.':'.($minutes%60).':'.($seconds%60).(($milliseconds===0)?'':'.'.rtrim($milliseconds%1000, '0'));
}

echo format_period(23.75);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4763668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档