格式化为运动时间的十分之一

时间:2013-12-15 18:50:21

标签: php time formatting

我有一段时间与以十分之一秒存储的运动有关。我需要像h:mm:ss.f那样格式化它们,其中每个部分只有在必要时才可见。一些例子:

Tenths        Formatted
          1            0.1
         12            1.2
        123           12.3
      1 234         2:03.4
     12 345        20:34.5
    123 456      3:25:45.6
  1 234 567     34:17:36.7
 12 345 678    342:56:07.8
123 456 789   3429:21:18.9

你会如何用PHP做到这一点?


这是我目前的解决方案,但想知道是否还有其他更干净,更有效或更有效的方法呢?

function sports_format($tenths)
{
    $hours = floor($tenths / 36000);
    $tenths -= $hours*36000;

    $minutes = floor($tenths / 600);
    $tenths -= $minutes*600;

    $seconds = floor($tenths / 10);
    $tenths -= $seconds*10;

    $text = sprintf('%u:%02u:%02u.%u', 
        $hours, $minutes, $seconds, $tenths);

    return preg_replace('/^(0|:){1,6}/', '', $text);
}

1 个答案:

答案 0 :(得分:0)

$tenths = (array)$tenths;
$div = array(36000, 600, 10);
while($d = array_shift($div))
  $tenths[0] -= ($tenths[] = floor($tenths[0] / $d)) * $d;

$text = vsprintf('%2$u:%3$02u:%4$02u.%u', $tenths);
return ltrim($text, '0:');

我不会认为这更干净。除了在ltrim()时使用正则表达式,您的代码就可以了。