Autor Zpráva
prochar1
Profil *
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
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 *
aha, tak to jo. Díky. Už jsem na to našel funkci, která funguje dobře.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0