Terve jälleen
Ihan tyhmiä kysymyksiä satelee nykyään minulta. Tässä on viritykseni:
<?php $jouluun = strtotime("24.12.2009") - time(); $p = explode(".", $jouluun / 60 / 60 / 24); $t = explode(".", ($jouluun - $pm = $p[0] * 86400) / 60 / 60); $m = explode(".", ($jouluun - $pm - $tm = $t[0] * 3600) / 60);
Muuttujassa $p[0] on päivät jouluun, $t[0] on tuntia jouluun ja $m[0] on minuuttia jouluun. Nämä toimivat oikein, mutta en saa millään sekunteja. Miten ne onnistuisi saamaan?
Toimisiko koodi osoitteessa http://www.gidnetwork.com/b-16.html ?
En nyt oikein edes käsitä mitä noi explode-viritykset tekevät, mutta eikös sekunnit ole jo tuossa $jouluun -muuttujassa? Siitä sitten saa päivät kun jakaa tuloksen 86400:lla (sekuntia päivässä) ja pyöristää alaspäin. Tunnit taas saa kun ottaa jakojäännöksen tuosta $jouluun / 86400 ja jakaa sen 3600 (sekuntia tunnissa) jne.
Explodet ovat sitä varten, että saadaan kokonaisluku. Kuten varmaan tiedät, että nuo eivät mene kokonaisluvuiksi aina. En siltikään saa sekunteja.
Ja koitappas jakaa tuo aika noin kun sanoit, tuskin on noin pieni desimaaliluku tarkoitus.
Se että ne eivät mene kokonaisluvuiksi ei haittaa, koska JTS kirjoitti, että pyöristä alaspäin ja ota jakojäännös luvusta.
...ja alaspäin pyöristäminen tapahtuu "floor()", funktiollla.
Seikkaperäisemmin:
-Johonkin tapahtumaan on 300 000 sekuntia
-Tämä on yhtäkuin 3 päivää (eli floor(300000 / 86400)) ja 40 800 sekuntia (jakojäännös)
-40 800 sekuntia on yhtäkuin 11 tuntia (floor(40800/3600)) ja 1200 sekuntia (jakojäännös)
Ja niin edelleen. Jakojäännöksen sai PHP:ssä muistaakseni suoraan käyttäen % -operaattoria.
Laskemisen voi aloittaa myös pienimmästä yksiköstä.
<?php $t = 1234567; // sekuntia // Jakojäännös 60:lla on tasaminuuteista jäävien sekuntien määrä. $s = $t % 60; // Kun vähennetään tämä $t:stä, seuraava jako menee varmasti tasan. $t = ($t - $s) / 60; // Sama minuuteille, tunneille jne. $m = $t % 60; $t = ($t - $m) / 60; // Menee varmasti tasan. $h = $t % 24; $t = ($t - $h) / 24; // Tunnit käsiteltiin, jäljellä on päiviä. $pv = $t; echo "$pv päivää, $h tuntia, $m minuuttia, $s sekuntia\n";
Näiden perusteella saan tehtyä tämän varmaan, mutta Metabolix. Jouluun on aikaa ohjelmasi mukaan "14601 päivää, 22 tuntia, 0 minuuttia, 0 sekuntia". :D
Macro kirjoitti:
Näiden perusteella saan tehtyä tämän varmaan, mutta Metabolix. Jouluun on aikaa ohjelmasi mukaan "14601 päivää, 22 tuntia, 0 minuuttia, 0 sekuntia". :D
Kyllä se minulla tulostaa "36 päivää, 4 tuntia, 54 minuuttia, 20 sekuntia", kun vaihdan $t:n alkuarvoksi tuon joululausekkeesi. Taisit itse nyt unohtaa siitä time():n pois.
Ohjelmoidessa on muuten selkeämpää ja toiminnallisesti varmempaa kirjoittaa päivämäärä muodossa "2009-12-24".
Unohdetaampas äskeinen viestini, olin näes unohtunut laittaa sinne $t:n arvoksi strtotime("2009-12-24") - time();. =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.