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

Configurações do servidor Web e de banco de dados para obter o fuso horário UTC correto


Se você se restringir aos tipos DATE e DATETIME do MySQL, poderá ignorar amplamente os problemas de fuso horário no próprio MySQL. Você quer evitar o tipo TIMESTAMP do MySQL porque:

No que diz respeito à leitura/gravação de valores DATETIME, você receberá exatamente o que colocou, o que é bom.

Isso deixa você com o problema de sempre garantir que você esteja gravando valores UTC no banco de dados.

A melhor maneira de garantir que o PHP está usando UTC é defini-lo explicitamente em seu aplicativo usando date_default_timezone_set() . Isso garantirá que chamadas como date('Y-m-d H:i:s') lhe dará o valor UTC. Também garantirá que algo como (new \DateTime('now'))->getTimezone() retornará uma instância UTC \DateTimeZone.

Você deve observar, é claro, que as coisas ficam significativamente mais difíceis quando você armazena valores de data/hora obtidos dos usuários. Nesses casos, você precisará determinar de alguma forma em qual fuso horário o usuário está e lidar com a conversão para UTC antes de persistir os valores. Supondo que seus usuários tenham alguma configuração de fuso horário por usuário, você basicamente faz algo como:
/** @var \DateTimeZone $userTZ */
$userTz = getUserTimezone();
$dateTime = new \DateTime($user_submitted_date_string, $userTz);
$dateTime->setTimezone(new \DateTime('UTC'));
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');