Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySql NOW()-funktio ja aikavyöhyke

lrp [13.05.2009 21:28:48]

#

Kyseessä on aikaleiman saaminen datetime tyyppiseen kenttään.

<?php
$sql = "INSERT INTO entries(pat_id, cat_id, dateposted, subject, body)VALUES(" .$_SESSION['user'] . ", " . $_POST['cat'] . ", NOW(), '" . $_POST['subject'] . "', '" . $_POST['body'] . "');";
?>

tuo NOW() tekee homman muuten, paitsi palvelin on muualla maailmalla ja tulee tuntien ero. Kokeilin tällaista:

<?php
$setzonesql="SET time_zone = '+3:00';";
mysql_query($setzonesql);?>

Hyvä tuli, mutta mites kun muuttuu talviajaksi?
No sitten kokeilemaan hullun lailla...
Onnistuin kun tein näin:

<?php
date_default_timezone_set ('Europe/Helsinki');
setlocale(LC_TIME, "fi_FI");?>

Lopputuloksena tuo yllä oleva paikallistaminen ja tämä

<?php
$sqltime=gmdate(date("Y-m-d H:i:s"));
$sql = "INSERT INTO entries(pat_id, cat_id, dateposted, subject, body)VALUES('$potilas', '$cat', '$sqltime', '$subject', '$body');";
mysql_query($sql);
?>

Eli vanha sotaratsu date() välitettynä gmdate()-funktiolle. Jos yritti pelkällä date()-funktiolla niin ei onnistunut(miksi?)

Tämän voi tehdä varmaan helposti MySql:llä tähän tyyliin

<?php
$setzonesql="SET time_zone = 'Europe/Helsinki';";
?>

En vaan saanut toimimaan. Tietääkö joku miksi.

Grez [13.05.2009 21:32:27]

#

Imho aika huono ajatus tehdä kantaan aikaleima jossa on valmiiksi laskettuna kesäaika.

lrp [13.05.2009 21:42:58]

#

Pientä perustelua.....

Grez [13.05.2009 21:53:50]

#

No suurin perustelu on, että lokakuun viimeisenä sunnuntaina sulla on kannassa joukko kellonaikoja 3:00 ja 4:00 välillä, jotka on kannassa identtisiä, mutta joilla on oikeasti tunnin ero.

Toki vastaavasti maaliskuun lopussa on tunnin "tauko", mutta se ei ole ihan niin vakavaa.

lrp [13.05.2009 22:55:33]

#

Homman nimi on se, että teen "lokikirja merkintöjä" MySql-kantaan ja ne pitäs olla ajallisesti oikein. Nyt kun niitä kaivaa sieltä niin aika on väärin koska palvelimen aika on eri. Onko ehdotuksia?

Niko [13.05.2009 23:36:53]

#

lrp kirjoitti:

Homman nimi on se, että teen "lokikirja merkintöjä" MySql-kantaan ja ne pitäs olla ajallisesti oikein. Nyt kun niitä kaivaa sieltä niin aika on väärin koska palvelimen aika on eri. Onko ehdotuksia?

Kyllähän ne toimii kunhan aikavyöhyke on oikein:

Palvelimen oletus, tässä tapauksessa, Europe/Helsinki

php -r "foreach (array(1238288399, 1238288400, 1238288401)
as $ts) echo date('d.m.y H:i:s', $ts), \"\n\";"
29.03.09 02:59:59
29.03.09 04:00:00
29.03.09 04:00:01

Jos aikavyöhyke on sen sijaan GMT+3 tai GMT+2 niin silloin ei oteta huomioon kesä- ja normaaliaikaa: (kyllä, etc/GMT-3 on GMT+3)

php -r "date_default_timezone_set('ETC/GMT-3'); foreach (ar
ray(1238288399, 1238288400, 1238288401) as $ts) echo date('d.m.y H:i:s', $ts), \
"\n\";"
29.03.09 03:59:59
29.03.09 04:00:00
29.03.09 04:00:01

Hycke [15.05.2009 13:24:59]

#

Eikö tuossa tapauksessa voisi käyttää UTC_TIMESTAMP()-funktiota, joka palauttaa UTC ajan aikavyöhykkeestä riippumatta.


linkki

Vastaus

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

Tietoa sivustosta