Mysql
 sql >> Database >  >> RDS >> Mysql

Impostazioni del server Web e database per ottenere il fuso orario UTC corretto

Se ti limiti ai tipi DATE e DATETIME di MySQL, puoi ignorare in gran parte i problemi di fuso orario in MySQL stesso. Vuoi evitare il tipo TIMESTAMP di MySQL perché:

Per quanto riguarda la lettura/scrittura dei valori DATETIME, otterrai esattamente ciò che hai inserito, il che è positivo.

Questo ti lascia con il problema di assicurarti sempre di scrivere valori UTC nel database.

Il modo migliore per assicurarsi che PHP utilizzi UTC è impostarlo esplicitamente nell'applicazione utilizzando date_default_timezone_set() . Ciò assicurerà che chiamate come date('Y-m-d H:i:s') ti darà il valore UTC. Garantirà inoltre che qualcosa come (new \DateTime('now'))->getTimezone() restituirà un'istanza UTC \DateTimeZone.

Dovresti notare, ovviamente, che le cose diventano molto più difficili quando memorizzi i valori di data/ora che prendi dagli utenti. In questi casi, dovrai determinare in qualche modo in quale fuso orario si trova l'utente e gestire la conversione in UTC prima di mantenere i valori. Supponendo che i tuoi utenti abbiano un'impostazione del fuso orario per utente, in pratica fai qualcosa del tipo:

/** @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');