Hodnoty datum/čas/datum a čas jsou uloženy v MySQL tak, jak je zadáte. Tj. pokud INSERT
řetězec 2012-04-17 12:03:23
do DATETIME
sloupec, to je hodnota, která bude uložena. Bude interně převedena na časové razítko, které může nebo nemusí být přesné (viz níže), ale když se na hodnotu znovu zeptáte, dostanete stejnou hodnotu zpět; zpáteční cesta je průhledná.
Problémy mohou nastat, pokud se pokusíte provádět výpočty času uvnitř SQL. Tj. jakákoli operace, která vyžaduje, aby SQL zohlednil časové pásmo a/nebo čas serveru. Například pomocí NOW()
. U kterékoli z těchto operací by měly časové pásmo a/nebo čas serveru být správně nastaven. Viz Problémy s časovým pásmem
.
Pokud se vás to netýká a potřebujete pouze výpočty v PHP, stačí se ujistit, že víte, z jaké časové zóny do které časové zóny chcete převádět. Za tímto účelem může je vhodné standardizovat všechny časy na UTC, ale není to nutné, protože převody časového pásma z libovolného časového pásma do jakéhokoli jiného časového pásma fungují stejně dobře, pokud máte jasno v tom, ze kterého časového pásma a do kterého časového pásma převádíte.
date_default_timezone_set('Asia/Tokyo'); // your reference timezone here
$date = date('Y-m-d H:i:s');
/* INSERT $date INTO database */;
$date = /* SELECT date FROM database */;
$usersTimezone = new DateTimeZone('America/Vancouver');
$l10nDate = new DateTime($date);
$l10nDate->setTimeZone($usersTimezone);
echo $l10nDate->format('Y-m-d H:i:s');