PHP, MySQL en timestamps

Alles over programmeren en development binnen de IT-wereld
Plaats reactie
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Het lijkt iets dom, maar geraak er niet meteen uit...

In MySQL doe ik een "update mytable set mytimestamp = utc_timestamp()" waarbij in de kolom mytimestamp inderdaad de UTC tijd terecht komt (ie. 2010-12-13 18:59:33)

Indien ik dit in PHP wil afbeelden in de lokale tijd gaat het echter fout...

Code: Selecteer alles

<?php date_default_timezone_set("Europe/Brussels"); ?>
date db: <?php echo $row['mytimestamp'] ?><br/>
strtotime: <?php echo strtotime($row['mytimestamp']) ?><br/>
date: <?php echo date("l, F jS Y G:i", strtotime($row['mytimestamp'])) ?><br/>
date_default_timezone_get: <?php echo date_default_timezone_get(); ?><br/>
date.timezone: <?php echo ini_get('date.timezone'); ?>
...geeft namelijk...
date db: 2010-12-13 18:59:33
strtotime: 1292263173
date: Monday, December 13th 2010 18:59
date_default_timezone_get: Europe/Brussels
date.timezone:
De timestamp die uit de database komt is dus correct, maar het probleem zit hem dat strtotime deze timestamp nogmaals gaat omzetten in UTC (op basis van de date_default_timezone_get) zodat hij op 17:59 uitkomt, en daarna de date functie hem terug naar de lokale tijd zet (wederom op basis van de date_default_timezone_get) zodat hij terug op 18:59 uitkomt (ipv. 19:59).

Tips hoe ik dit het beste oplos... ?
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Dit is alvast m'n Quick and dirty oplossing...

Code: Selecteer alles

function strtoutctime($s) {

  $currts = date_default_timezone_get();
  date_default_timezone_set("UTC");
  $result = strtotime($s);
  date_default_timezone_set($currts);
  return $result;
}
... zodat ik het volgende kan doen...

Code: Selecteer alles

date: <?php echo date("l, F jS Y G:i", strtoutctime($row['mytimestamp'])) ?><br/>
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

En MySQL de timestamp als unixtime laten retourneren in de query?

Code: Selecteer alles

SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Ik vrees dat ik dan hetzelfde probleem ga hebben... UNIX_TIMESTAMP() gaat eveneens mijn timestamp welke reeds UTC is trachten om te zetten naar wat "hij" denkt dat UTC zou moeten zijn (en ditmaal vermoedelijk op basis van de server settings, en aangezien het ding in de US staat gaat hij er dan eerst 7u aftrekken).

Moest het werken... probleem is dan dat je geen SELECT * FROM meer kan gebruiken, maar telkens verplicht ben alle velden op te geven.
Plaats reactie

Terug naar “Development”