Преобразование поплавок ЧЧ: ММ

Обновить

December 2018

Просмотры

4.2k раз

6

У меня есть вопрос о форматировании строки или с плавающей точкой.

Таким образом, по существу, у меня есть эти цифры, которые должны быть выведены, как показано ниже:

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, но был не в состоянии отформатировать число должным образом для того, чтобы использовать.

Благодарю.

3 ответы

1

Вы могли бы сделать что-то вроде:

$example = 1.3333;

Получить дробный элемент вашего времени, делая по модулю 1

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

Вы можете использовать (int)$exampleили floor($example)получить час компонент вашего времени.

$hour = floor($example);
echo $hour." ".$minutes;
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);
10

Вам просто нужно sprintfдля 0 дополнения, fmodчтобы извлечь фракцию, и , возможно , roundесли пол секунды неприемлем:

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