将float转换为HH:MM格式

时间:2014-12-16 03:54:44

标签: php

我有关于格式化字符串或浮点数的问题。

基本上我有这些数字需要输出如下所示:

9.8333333333333 -> 09:50
5.5555555555556 -> 05:33
10.545454545455 -> 10:33
1.3333333333333 -> 01:20
20.923076923077 -> 20:55

这是我写的函数,它在我需要的东西上做得非常糟糕。

function getTime($dist, $road) {
    $roads = array('I' => 65, 'H' => 60, 'M' => 55, 'S' => 45);
    $time = $dist / $roads[$road];
    return round($time -1) . ':' . substr((float)explode('.', $time)[1] * 60, 0, 2);
}

因此,如果有任何想法ID欣赏它,我已经尝试了DateTime类,但无法正确格式化数字以供它使用。

感谢。

3 个答案:

答案 0 :(得分:12)

你需要sprintf用于0填充,fmod用于提取分数,如果地板秒数是不可接受的,可选择round

$time = 15.33;
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60);

答案 1 :(得分:1)

您可以执行以下操作:

$example = 1.3333;

通过模1开始获取时间的小数元素

$remainder = $example % 1;
$minutes = 60 * $remainder;

然后,您可以使用(int)$examplefloor($example)来获取您的时间部分。

$hour = floor($example);
echo $hour." ".$minutes;

答案 2 :(得分:0)

修剪浮点数的整数部分:

$time = 9.83333333333;
$hourFraction = $time - (int)$time;

乘以更大单位(小时)中的单位数(分钟):

$minutes = $hourFraction * 60;

回声:

$hours = (int)$time;
echo str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT);