Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP e MySQL:convertendo TIMESTAMP armazenado no fuso horário local do usuário


Os valores de data/hora/datahora são armazenados no MySQL conforme você os fornece. Ou seja se você INSERT a string 2012-04-17 12:03:23 em um DATETIME coluna, esse é o valor que será armazenado. Ele será convertido internamente em um carimbo de data/hora que pode ou não ser preciso (veja abaixo), mas quando você consultar o valor novamente, obterá o mesmo valor de volta; a ida e volta é transparente.

Podem ocorrer problemas se você tentar fazer cálculos de tempo dentro do SQL. Ou seja qualquer operação que exija que o SQL leve em consideração o fuso horário e/ou a hora do servidor. Por exemplo, usando NOW() . Para qualquer uma dessas operações, o fuso horário e/ou a hora do servidor devem ser definido corretamente. Consulte Problemas de fuso horário .

Se isso não lhe diz respeito e você só precisa fazer cálculos em PHP, você só precisa ter certeza de qual fuso horário para qual fuso horário você deseja converter. Para isso, pode ser conveniente padronizar todos os horários para UTC, mas não é necessário, pois as conversões de fuso horário de qualquer fuso horário para qualquer outro fuso horário funcionam tão bem, desde que você tenha certeza de qual fuso horário você está convertendo de e para.
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');