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

Php 将浮点转换为HH:MM格式,php,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 =

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

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

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类,但无法正确设置数字格式以供使用


谢谢。

修剪浮点的整数部分:

$time = 9.83333333333;
$hourFraction = $time - (int)$time;
乘以较大单位(小时)中的单位数(分钟):

回声:


你可以这样做:

$example = 1.3333;
通过模1得到时间的分数元素

$remainder = $example % 1;
$minutes = 60 * $remainder;
然后,您可以使用
(int)$example
floor($example)
获取时间的小时部分

$hour = floor($example);
echo $hour." ".$minutes;
您只需要0填充,以提取分数,如果无法接受秒数,还可以选择:

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

看看这个回答:非常感谢,这很有效,我理解。这很有魅力,真的救了我!谢谢科尔宾!我用的是圆的。这是我使用的数学:
sprintf(“%02d:%02d',(int)$time,round(fmod($time,1)*60))
这也有效,只是没有上面公布的方法那么有效。出于某种原因,mod 1没有给我剩余的部分,不太清楚为什么。但以上确实给了我答案,无论如何,谢谢!和你有同样的想法。
$hour = floor($example);
echo $hour." ".$minutes;
$time = 15.33;
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60);