Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przeliczanie seknud miniut i milisekund
Forum PHP.pl > Forum > Przedszkole
Treker
Witam, wiem że temat był poruszany kilku krotnie, ale jakoś nie potrafię napisać dobrze działającej funkcji sciana.gif

Na wejściu podaje ilość milisekund, a na wyjściu muszę uzyskać ile to minut : sekund : milisekund

Przykład:

Wprowadzamy: 84120
Otrzymujemy: 01:24:12
(1 *60 *1000) + (24*1000) +(12*10) = 84120

Dla ścisłości przypominam, że 1 ms = 0,001 s czarodziej.gif
Wiem że sekundy na minuty przelicza się banalnie odpowiednim dzieleniem (%), ale tu mnie myli, że min i sek się liczy do 59, a milisekundy do 999.

Dziękuje z góry za pomoc.
Kshyhoo
Spodziewasz się gotowca? Pokaż kod, to co masz.
thek
No przecież to normalne działanie. Tyle, że zamiast sekund masz milisekundy, a więc dzielisz przez inna wartość i modulo smile.gif Robisz sprawdzenia czy liczba większa niż 3.600.000 (godziny), to samo z 60.000 (minuty) i 1.000 (sekundy), za każdym razem interesując się częścią całkowitą oraz wyliczając modulo dla dalszych obliczeń. Kończysz gdy dochodzisz do dzielenia przez 1000 lub gdy reszta z dzielenia we wcześniejszych częściach wyjdzie 0.

Masz więc w Twoim przykładzie:
84120 / 3600000 = 0 i 84120 % 3600000 = 84120 -> 0 godzin
84120 / 60000 = 1 i 84120 % 60000 = 24120 -> 1 minuta
24120 / 1000 = 24 i 24120 % 1000 = 120 -> 24 sekundy i 120 milisekund
Treker
Dziękuję za wyjaśnienie.
Ja kombinowałem jeszcze z czymś takim że z liczby 84120 brałem 3 ostatnie znaki 120 i wiedziałem że są do milisekundy, później brałem resztę znaków czyli 84 i przeliczałem z sekund na minuty, ale po drodze musiałem gdzieś się pomylić, bo źle przeliczało

Coś takiego skleciłem, ale chyba trochę na około:
  1. function naMinuty($czas_m) {
  2. $minuty = floor($czas_m / 60000);
  3. $sekundy = ($czas_m % 60000);
  4. $milisekundy = floor(($sekundy % 1000) / 10);
  5. $sekundy = floor($sekundy / 1000);
  6. return $minuty . " : " .$sekundy . " : " .$milisekundy;
  7. }


Jak zmusić aby np 1 minuta była wyświetlana jako 01?
Kshyhoo
Coś na podobę:
  1. sprintf("%02d:%02d:%02d", $g, $m, $s);

Funkcja formatująca sprintf() zapewnia umieszczenie wiodących zer dla liczb mniejszych niż 10.
mlody69
Zastanawia mnie jedno, jak sekundy przeliczyć na ms i wykonać coś z dokładnością do milisekundy
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.