将浮点数转换为 HH:MM 格式


Convert float to HH:MM format

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

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

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

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

谢谢。

您只需要 0 填充的 sprintffmod提取分数,如果地板秒是不可接受的,可以选择round

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

你可以做这样的事情:

$example = 1.3333;

通过做模 1 来获取时间的小数元素

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

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

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

修剪浮点数的整数部分:

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