Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Aika

Sivun loppuun

novari [21.03.2011 14:21:46]

#

Olen tekemässä aprillipilaa kotisivuilleni ja aikani pähkäillessäni päätin kysyä täältä neuvoa.
Onko helppoa konstia saada aloitusaika 00:00:01 1.4.11 ja lopetus aika 23:59:59 1.4.11 joita vertaisin time() funtiolla saatuun aikaan? En viitsisi laskea käsin koska virheen mahdollisuus kasvaa. Tämä olisi tarkoitus koodata PHP:llä.
Tuona aikana näytetään aprillipilasivu.

Grez [21.03.2011 14:24:09]

#

mktime

novari [21.03.2011 14:29:45]

#

Voiko mktime() ja time() saatuja lukuja verrata keskenään ilman muutoksia?

Metabolix [21.03.2011 14:34:27]

#

Voi.

makumaku [21.03.2011 16:04:18]

#

Vaikka ihan tarkkaan en tiedä sovellustasi, niin joissakin tilanteissa, joissa ei välttämättä tarvita tunteja ja sitä pienempiä yksiköitä, voisi olla loogisempaa käyttää esim date-funktiota tyyliin:

if(date("dmY") === "01042011")
    print "Tänään jaetaan ilmaista rahaa kaikille. Tule heti!";

peg [21.03.2011 17:49:39]

#

tai tarkemmin näin:

<?php
if(date("dmY") > "31032011" and date("dmY") < "02042011")
    print "Tänään jaetaan ilmaista rahaa kaikille. Tule heti!";
?>

makumaku [21.03.2011 19:19:46]

#

Täh? Nyt tipahdin kärryiltä.

Grez [21.03.2011 19:26:06]

#

peg kirjoitti:

tai tarkemmin näin:

<?php
if(date("dmY") > "31032011" and date("dmY") < "02042011")
    print "Tänään jaetaan ilmaista rahaa kaikille. Tule heti!";
?>

Onko tämän tarkoitus olla ajatuksia herättävän huono neuvo?

Eihän tuo ehto toteudu koskaan. Makumakun versiossa ei ollut mitään vikaa, joten miksi tällainen aivokuollut vaihtoehto?

Yucca [22.03.2011 11:49:47]

#

Kun kyse on ajasta, on hyvä muistaa, että maailman eri paikoissa on eri aika ja myös päivä vaihtuu eri aikaan. PHP:n time-funktio antaa palvelimen ajan, joka voi olla ihan eri aika kuin se, missä käyttäjä elää. Hupisovelluksessa tämä ei ehkä ole olennaista, mutta aprillaus olisi kai kuitenkin parempi tehdä silloin, kun käyttäjä elää huhtikuun 1. päivää – siis selaimessa toimivalla koodilla.

Yksinkertaisin ratkaisu on kai se, että selaimessa toimivalla Javascriptillä generoidaan aprillauselementit, jos selaimen kellon mukaan on 1.4.

Metabolix [22.03.2011 19:35:47]

#

Yucca kirjoitti:

PHP:n time-funktio antaa palvelimen ajan, joka voi olla ihan eri aika kuin se, missä käyttäjä elää.

Väärin. PHP:n time-funktion tuottama aikaleima ei riipu aikavyöhykkeestä. Palvelimen vyöhykevalinta sen sijaan vaikuttaa mm. date-funktion tuottamaan tekstimuotoiseen päivämäärään. Ennen mitään päivämäärien käsittelyä kannattaakin asettaa PHP:n asetuksiin oikea aikavyöhyke joko asetustiedoston kautta tai funktiolla date_default_timezone_set.

Yucca [22.03.2011 23:50:02]

#

Joo kirjoitin time-funktiosta kun piti kirjoittaa date-funktiosta (joka on tässä luonnollisempi kuten on mainittu). Joka tapauksessa käytettiinpä GMT-, UTC- tai paikallisaikaa, saadaan jotakin, jonka suhde käyttäjän aikaan on tuntematon.

Pointtini oli, että käyttäjän ajasta riippuvaiset asiat pitäisi tehdä selainpäässä eikä palvelinpäässä.

novari [23.03.2011 10:53:08]

#

Kysymys herätti näköjään kommentointi rimpsun joten laitan oman versioni.
Tämä tuntuu toimivan lyhyellä aikavälillä, en tiedä sitten kun mennään vuorokausiin.

<?php
$aika=time();
$aloitus=mktime(00,00,01,4,1,2011,1);
$lopetus=mktime(23,59,59,4,1,2011,1);
if(($aika > $aloitus) && ($aika < $lopetus)){
	header("Location:" . "aprillipila.html");
    exit();
}
?>

Olli [27.03.2011 09:17:12]

#

Tuo vaikuttaisi mielestäni ihan kunnolliselta. En näe tosin mitään estettä vuorokausienkaan kanssa.

Lebe80 [28.03.2011 10:02:16]

#

novari kirjoitti:

Kysymys herätti näköjään kommentointi rimpsun joten laitan oman versioni.
Tämä tuntuu toimivan lyhyellä aikavälillä, en tiedä sitten kun mennään vuorokausiin.

<?php
$aika=time();
$aloitus=mktime(00,00,01,4,1,2011,1);
$lopetus=mktime(23,59,59,4,1,2011,1);
if(($aika > $aloitus) && ($aika < $lopetus)){
	header("Location:" . "aprillipila.html");
    exit();
}
?>

Lopetuspäivässä on virhe. Oikea lopetusaika pitäisi olla $lopetus=mktime(0,0,0,4,2,2011,1), mikäli halutaan pitää tuo ehtolauseen vertailu tuollaisena.

Tai sitten ehtolauseen lopetuspäivän ehtoon pitäisi lisätä toteutuvaksi myös silloin, kun aika on yhtäsuuri kuin lopetusaika.

Kyse on tosin vain sekunnista, mutta silti...

novari [28.03.2011 14:10:16]

#

Ai.... Meinaatko ettei ohjelma lopeta keskiyöllä toimintaansa?
Eihän tuo alkukaan ollut mktime(0,0,0,4,1,2011,1);
Miksi siis tuollain, jotenkin sattuu silmään paremmin kun on yksi sekuntti yli ja ali. En tiedä onko se huonoa ohjelmointia mutta ajatuksena oli ettei siinä kukaan paljoa menetä.

makumaku [28.03.2011 14:40:31]

#

Niin, jokainen varmaan ymmärtää ettei tässä kyseisessä sovellutuksessa asialla ole mitään merkitystä. Ihan yhtä hyvin aprillipilan näyttö voisi loppua vaikka jo 15 sekuntia ennen vuorokauden vaihdetta. Asia on siis periaatteellinen.

Olisi hyvä oppia ohjelmoimaan ja tekemään tarkistukset periaatteellisella tasolla oikein. Jos sama bugi olisi ollut esim jossain pankkiohjelmassa, niin asia saattaisi olla hyvinkin vakava. Kyse ei ole siitä mikä näyttää silmään hyvältä, vaan siitä että tarkistus toimii oikein. Nyt tuo sovellus ei enää näytä aprillipilaa käyttäjälle jos käyttäjä menee sivulle aprillipäivänä kello 23:59:59, vaikka pitäisi. Kuten sanottu, tässä tällä ei ole käytännössä mitään merkitystä, mutta jossakin toisessa yhteydessä sama virhe voisi olla hyvinkin vakava.

Lebe80 [28.03.2011 14:42:27]

#

Eihän siinä sekunnissa menetäkään, mutta jos ohjelmoidaan tuolla tavalla, ja vaikkapa alettaisiin pyöristelemään lukuja esim. tunneilla, niin helposti takaraivoon jää tapa, että käytetään juuri tapaa, ettei "ensimmäisiä" pienimpiä yksiköitä oikeasti huomioidakaan ehtolauseessa.

Täss tapauksessa tosiaan kyse on vain parista sekunnista, muttei tapa iskostuisi koodin käyttäjälle, niin kannattaisi opettaa juuri "oikea" tapa.

novari [28.03.2011 15:05:27]

#

Kiitos! Tein nuo puuttuvat sekunnit tarkoituksella joten olin tietoinen että kaksi sekunttia jää uupumaan pilasta. No, yritän parantaa tapani ja tehdä ohjelmia jotka täyttävät kriteerit. Kritiikki on aina tervetullutta, niistä oppii.


Sivun alkuun

Vastaus

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

Tietoa sivustosta