PHP — 将毫秒转换为小时:分钟:秒。小数

2022-08-30 21:34:36

我有一个脚本,它以秒为单位(小数秒的小数点后2点):获取值:

$seconds_input = 23.75

然后,我将其转换为毫秒:

$milliseconds = $seconds_input * 1000; // --> 23750

然后我想像这样格式化它:

H:M:S.x // --> 0:0:23.75

其中“x”是秒的分数(无论小数点后有多少位)。

有什么帮助吗?我似乎无法将我的思想包裹在这一点上。我尝试使用gmdate(),但它一直从小数秒开始。

谢谢。


答案 1

编辑:好吧,我有点匆忙。以下是执行您要求的一种方法:

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');
}

答案 2

我的看法

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" : '')
  ;
}

然后测试

$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;
}

其产生

00:00:23
00:00:23.75
00:00:23.75123456789
34293:33:09.75

推荐