Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert float to HH:MM format

Tags:

php

I have a question about formatting a string or float.

So essentially I have these numbers which need to be outputted as shown:

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

Here is the function I wrote that is doing a terrible job at what I need it to.

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

So if anyone has any ideas id appreciate it, i've tried the DateTime class but wasn't able to format the numbers properly for it to be used.

Thanks.

like image 738
ykykykykyk Avatar asked Dec 16 '14 03:12

ykykykykyk


3 Answers

You just need sprintf for the 0 padding, fmod to extract the fraction, and optionally round if flooring the seconds is unacceptable:

$time = 15.33;
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60);
like image 200
Corbin Avatar answered Nov 14 '22 20:11

Corbin


You could do something like:

$example = 1.3333;

Get the fractional element of your time by doing modulo 1

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

You can then use (int)$example or floor($example) to get the hour component of your time.

$hour = floor($example);
echo $hour." ".$minutes;
like image 24
Adam W Avatar answered Nov 14 '22 21:11

Adam W


Trim off the integer portion of the float:

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

Multiply by the number of units (minutes) in the greater unit (hour):

$minutes = $hourFraction * 60;

Echo:

$hours = (int)$time;
echo str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT);
like image 1
sjagr Avatar answered Nov 14 '22 20:11

sjagr