Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Przeliczanie seknud miniut i milisekund
Treker
post 22.02.2010, 09:55:37
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kshyhoo
post 22.02.2010, 10:00:58
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Spodziewasz się gotowca? Pokaż kod, to co masz.


--------------------
Go to the top of the page
+Quote Post
thek
post 22.02.2010, 10:11:12
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Treker
post 22.02.2010, 12:29:09
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Treker 22.02.2010, 12:29:26
Go to the top of the page
+Quote Post
Kshyhoo
post 22.02.2010, 13:12:04
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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.


--------------------
Go to the top of the page
+Quote Post
mlody69
post 16.12.2010, 20:06:08
Post #6





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Zastanawia mnie jedno, jak sekundy przeliczyć na ms i wykonać coś z dokładnością do milisekundy
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 00:53