AJB*_*AJB 11 php milliseconds seconds
我有一个脚本,它以秒为单位获取一个值(到小数秒的2个小数点):
$seconds_input = 23.75
Run Code Online (Sandbox Code Playgroud)
然后我将其转换为毫秒:
$milliseconds = $seconds_input * 1000; // --> 23750
Run Code Online (Sandbox Code Playgroud)
然后我想格式化它:
H:M:S.x // --> 0:0:23.75
Run Code Online (Sandbox Code Playgroud)
其中'x'是第二个的分数(但是小数点之后的位数很多).
有帮助吗?我似乎无法围绕这一点思考.我尝试使用gmdate(),但它一直在缩短小数秒.
谢谢.
irc*_*ell 22
编辑:嗯,我有点仓促.这是你要问的一种方法:
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');
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ley 17
我的看法
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" : '')
;
}
Run Code Online (Sandbox Code Playgroud)
然后是测试
$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;
}
Run Code Online (Sandbox Code Playgroud)
产量
00:00:23
00:00:23.75
00:00:23.75123456789
34293:33:09.75
Run Code Online (Sandbox Code Playgroud)