Autor | Zpráva | ||
---|---|---|---|
prochar1 Profil * |
#1 · Zasláno: 15. 3. 2010, 11:28:04
Dobrý den,
mám čas (myšleno časová délka, např. sportovní výsledek), a mám ho celý vyjádřený v sekundách. Jak ho jednoduše přepočítám do formátu hodin, minut, sekund (H:m:s). vytvořil jsem si funkci function cas($time){ $hod=$time/60/60; $h=floor($hod); $min=($hod-$h)*60; $m=floor($min); $sec=($min-$m)*60; $s=round($sec); $res=str_pad($h,2,0,STR_PAD_LEFT).":".str_pad($m,2,0,STR_PAD_LEFT).":".str_pad($s,2,0,STR_PAD_LEFT); return $res; } jenže to nějakým záhadným způsobem funguje špatně, protože v některých případech, ale pouze v některých to spočítá např. 36:17:60, což je jaksi blbě. Nevím jestli je to nějaká chyba v php (verze 4.4. je na hostingu), protože např. 36:16:60 to už neudělá, tam to hodí správně 36:17:00. Existuje nějaký jiný způsob jak takto počítat s časem? Google vyhazuje pořád jen Date() a podobné funkce nepočítající s časem jako délkou. Děkuji. |
||
petr 6 Profil |
#2 · Zasláno: 15. 3. 2010, 12:35:09 · Upravil/a: petr 6
prochar1:
„to nějakým záhadným způsobem funguje špatně“ Zaokrouhlováním? Konkrétně na řádku 2 dělíš šedesáti a na řádku 4 opět násobíš, jenže php nepočítá s 1/3, ale s 0.3333333 (nevím přesně na kolik míst) a 0.3333333*3 je 0.9999999, nikoliv 1. I když jak na to koukám pozorněji, tak problém bude nejspíš na řádku 7, kde sekundy zaokrouhluješ a z 36:17:59.9 se ti tudíž stane 36:17:60. Tam pomůže, když na sekundy použiješ opět floor a úplně na začátku zaokrouhlíš $time. Nicméně i tak by se výpočet minut a sekund měl upravit, abys nenásobil desetinné číslo, které může být nějak zaokrouhlené. Možná by pomohlo, kdybys napsal, na jaký argument ti to vrátí těch 36:17:60 (podle zaokrouhlování sekund odhaduju, že $time může být i desetinné číslo) |
||
prochar1 Profil * |
#3 · Zasláno: 15. 3. 2010, 15:23:20
aha, tak to jo. Díky. Už jsem na to našel funkci, která funguje dobře.
|
||
Časová prodleva: 14 let
|
0