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.
Imho aika huono ajatus tehdä kantaan aikaleima jossa on valmiiksi laskettuna kesäaika.
Pientä perustelua.....
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.
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?
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
Eikö tuossa tapauksessa voisi käyttää UTC_TIMESTAMP()-funktiota, joka palauttaa UTC ajan aikavyöhykkeestä riippumatta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.