Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sekuntia päivään x

Sivun loppuun

Macro [17.11.2009 15:10:19]

#

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?

Jaska [17.11.2009 15:17:27]

#

Toimisiko koodi osoitteessa http://www.gidnetwork.com/b-16.html ?

kayttaja-2791 [17.11.2009 15:37:16]

#

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.

Macro [17.11.2009 15:50:09]

#

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.

Teuro [17.11.2009 16:02:16]

#

Se että ne eivät mene kokonaisluvuiksi ei haittaa, koska JTS kirjoitti, että pyöristä alaspäin ja ota jakojäännös luvusta.

jo123 [17.11.2009 17:15:05]

#

...ja alaspäin pyöristäminen tapahtuu "floor()", funktiollla.

kayttaja-2791 [17.11.2009 17:43:25]

#

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.

Metabolix [17.11.2009 18:52:51]

#

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";

Macro [17.11.2009 18:56:12]

#

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

Metabolix [17.11.2009 19:07:03]

#

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".

Macro [17.11.2009 19:10:56]

#

Unohdetaampas äskeinen viestini, olin näes unohtunut laittaa sinne $t:n arvoksi strtotime("2009-12-24") - time();. =)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta