sql >> Databáze >  >> RDS >> Mysql

PHP a MySQL:Převod uloženého TIMESTAMP do místního časového pásma uživatele

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');


  1. Chcete-li SHA512-hash heslo v databázi MySQL pomocí Pythonu

  2. Licencování MySQL a GPL

  3. Jak vygeneruji sérii hodinových průměrů v MySQL?

  4. Snadný způsob generování sloupce názvu slimáka ze sloupce názvu?