Minulla on seuraavanlainen funktio ajan muuntamiseen:
// Ajan muunnosfunktio muotoon hh:mm:ss function muunna_aika($sek) { $tun=floor($sek/3600); $min=floor(($sek/3600-$tun)*60); $sec=($sek/60-floor($sek/60))*60; if($min<10) { $min = "0" . $min; } if($sec<10) { $sec = "0" . $sec; } return $tun . ":" . $min . ":" . $sec; }
Kun sille annetaan parametriksi 40630, se palauttaa 11:17:010. Miten on mahdollista, että se lisää luvun 10 eteen nollan, kun tuossahan tarkistetaan että if($sec<10).
Minulla skripti muodostaa merkkijonon:
11:17:09.9999999999977
Tässä sekuntiluku on hieman kymmentä pienempi. Ilmeisesti kyseessä on siis pyöristysvirhe. En kyllä tiedä, miksi sinulla luku muuttuu kympiksi merkkijonon muodostuksessa.
Korjattu. roundataan vaan $sec niin toimii.
Kovin mutkikkaasti erottelet noita. Jakojäännöksellä kävisi helpommin, ja jos yli vuorokauden mittaisia pätkiä ei tarvitse esittää tunneissa, niin hyvä idea voisi olla PHP:n date-funktio. Sillä saa aikaleimat sopivasti muotoiltua, ja niin kauan kuin ei vuosien mittakaavaan mennä, lopputulos lienee sama kuin tuolla tavalla laskemalla. Vuosissa sitten joutuu joka tapauksessa tekemään jonkinlaisen kompromissin karkausvuosia laskettaessa.
Vähän vastaavanlainen koodivinkki tullut joskus kirjoitettua:
https://www.ohjelmointiputka.net/koodivinkit/
Tosin tuokaan ei käytä jakojäännöstä aikojen laskemiseen, mikä sinänsä kyllä olisi varmasti järkevämpää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.