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.
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);
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;
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With