Autor Zpráva
ForestCZE
Profil
Zdravím, snažím se převést čas v sekundách na jednotlivé veličiny a mám tento kód:

$ticks = 36000;

$days = $ticks / (24 * 60 * 60);
$hours = ($ticks - ($days * (24 * 60 * 60))) / 3600;
$minutes = $ticks - ($days * (24 * 60 * 60) + $hours * (3600)) / 60;
$seconds = $ticks - ($days * (24 * 60 * 60) + $hours * (3600)) + $minutes * 60;

Dny a hodiny to vypočítá správně. Minuty a sekundy vyhodí obrovská čísla. Co tam mám špatně? Díky :)
Kajman
Profil
V minutes rozdíl uzávorkujte a teprve potom dělte.
Kajman
Profil
A u sekund minuty odčítejte.
ForestCZE
Profil
Takto?

$minutes = ($ticks - ($days * (24 * 60 * 60) + $hours * (3600))) / 60;
$seconds = ($ticks - ($days * (24 * 60 * 60) + $hours * (3600))) - $minutes * 60;


EDIT: Popřípadě kdyby někdo měl nějaké lepší řešení, např. s modulem nebo něco podobného, tak budu rád.
Tomášeek
Profil
ForestCZE:
Takto?
Funguje to? Spíše ne, že? Tak takto asi ne.

$ticks = 136073;

$minute = 60;
$hour = 3600;
$day = 86400;

$days = floor($ticks / $day);
$hours = floor(($ticks - $days * $day) / $hour);
$minutes = floor(($ticks - $days * $day - $hours * $hour) / $minute);
$seconds = $ticks - $days * $day - $hours * $hour - $minutes * $minute;

S modulem pak případně takto

$days = floor($ticks / $day);
$hours = floor(($ticks % $day) / $hour);
$minutes = floor(($ticks % $hour) / $minute);
$seconds = $ticks % $minute;

Není to ale žádná velká logika, myslím, že po chvíli přemýšlení navíc bys měl být schopný se správnému "vzorci" dobrat. Jak s modulem, tak bez něj.
ForestCZE
Profil
Tomášeek:
Funguje to? Spíše ne, že? Tak takto asi ne.
Právě, že funguje.

Jinak díky, vyzkouším.
Tomášeek
Profil
Aha, zkusil jsem to vykopirovat k tomu memu prikladu a vrátilo to špatné hodnoty. Někde jsem asi rano udělal chybu.

Vypada to dost podobne (jsem na tel.), ty odecitas součet všeho, ja rovnou jednotlive sekundy. Chybi ti tam ale floor, bude ti to vracet desetinná cisla, coz nechceš (zkus si dosadit nejake méně kulaté cislo do ticks.
ForestCZE
Profil
Tomášeek:
Vždycky dosazuji celé číslo a pokud náhodu vyjde desetinné, tak integer stejně vrátí celé, což přesně potřebuji. Funguje to perfektně s tím modulem od tebe. Ještě jednou díky :)
Keeehi
Profil
ForestCZE:
pokud náhodu vyjde desetinné, tak integer stejně vrátí celé,
To máš pravdu. Ovšem přetypování na integer v tvém kódu nikde není a výsledek operace int / int může být i float.

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