Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP et MySQL :conversion de l'horodatage stocké en fuseau horaire local de l'utilisateur

Les valeurs date/heure/dateheure sont stockées dans MySQL au fur et à mesure que vous les fournissez. C'est à dire. si vous INSERT la chaîne 2012-04-17 12:03:23 dans un DATETIME colonne, c'est la valeur qui sera stockée. Il sera converti en interne en un horodatage qui peut être précis ou non (voir ci-dessous), mais lorsque vous redemanderez la valeur, vous obtiendrez la même valeur ; l'aller-retour est transparent.

Des problèmes peuvent survenir si vous essayez d'effectuer des calculs de temps dans SQL. C'est à dire. toute opération nécessitant que SQL tienne compte du fuseau horaire et/ou de l'heure du serveur. Par exemple, en utilisant NOW() . Pour chacune de ces opérations, le fuseau horaire et/ou l'heure du serveur devraient être réglé correctement. Voir Problèmes de fuseau horaire .

Si cela ne vous concerne pas et que vous n'avez qu'à faire des calculs en PHP, il vous suffit de vous assurer de savoir à partir de quel fuseau horaire vers quel fuseau horaire vous souhaitez convertir. À cette fin, il peut être pratique pour normaliser toutes les heures en UTC, mais ce n'est pas nécessaire, car les conversions de fuseau horaire de n'importe quel fuseau horaire vers n'importe quel autre fuseau horaire fonctionnent aussi bien, tant que vous savez clairement de quel fuseau horaire vous effectuez la conversion.

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