2014-12-16 11 views
5

Mam pytanie dotyczące formatowania ciągu znaków lub wartości zmiennoprzecinkowej.Konwertuj zmiennoprzecinkowe na GG: MM format

Więc zasadniczo mam te numery, które muszą być wyprowadzane w następujący sposób:

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

Oto funkcja pisałem, że robi straszną pracę na co muszę go.

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

Więc jeśli ktoś ma jakieś pomysły id cenią go, próbowałem klasy DateTime, ale nie był w stanie sformatować numery prawidłowo, aby była ona używana.

Dzięki.

+0

Wystarczy popatrzeć na to odpowiedź: http: // stackoverflow .com/a/1345609/1972100 –

Odpowiedz

8

Wystarczy sprintf dla 0 obicia, fmod wyodrębnić część oraz ewentualnie round jeśli podłogi sekundy jest niedopuszczalne:

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

Wielkie dzięki, że działało świetnie i rozumiem to. – julienhaversano

+1

To zadziałało jak urok i poważnie mnie uratowało! Dzięki, Corbin! Użyłem rundy. Oto matematyka, której użyłem: 'sprintf ('% 02d:% 02d', (int) $ czas, runda (fmod ($ czas, 1) * 60))' – cbloss793

0

Przycinanie się część całkowitej pływaka:

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

pomnożyć przez liczbę jednostek (w minutach) w większej jednostki (godzina)

$minutes = $hourFraction * 60; 

Echo:

$hours = (int)$time; 
echo str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT); 
+0

To również zadziałało, po prostu nie tak wydajne, jak opisana powyżej metoda. – julienhaversano

1

Możesz zrobić coś takiego:

$example = 1.3333; 

Get element ułamkową swojego czasu, wykonując modulo 1

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

Następnie można użyć (int)$example lub floor($example) uzyskać składnik godzinny czas.

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

Z jakiegoś powodu mod 1 nie dał mi reszty, nie do końca pewny dlaczego. Ale powyższe dało mi moją odpowiedź, i tak dziękuję! Miał takie samo myślenie jak ty. – julienhaversano

Powiązane problemy