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

PHP e MySQL:conversione di TIMESTAMP memorizzato nel fuso orario locale dell'utente

I valori di data/ora/data/ora sono memorizzati in MySQL man mano che li fornisci. Cioè. se INSERT la stringa 2012-04-17 12:03:23 in un DATETIME colonna, questo è il valore che verrà archiviato. Verrà convertito internamente in un timestamp che potrebbe essere accurato o meno (vedi sotto), ma quando esegui nuovamente una query per il valore, otterrai lo stesso valore; il viaggio di andata e ritorno è trasparente.

Possono verificarsi problemi se si tenta di eseguire calcoli del tempo all'interno di SQL. Cioè. qualsiasi operazione che richieda che SQL tenga conto del fuso orario e/o dell'ora del server. Ad esempio, utilizzando NOW() . Per ognuna di queste operazioni, il fuso orario e/o l'ora del server dovrebbero essere impostato correttamente. Vedi Problemi relativi al fuso orario .

Se questo non ti riguarda e devi solo eseguire calcoli in PHP, devi solo assicurarti di sapere da quale fuso orario a quale fuso orario vuoi convertire. A tale scopo può essere conveniente standardizzare tutti gli orari in UTC, ma non è necessario, poiché le conversioni di fuso orario da qualsiasi fuso orario a qualsiasi altro fuso orario funzionano altrettanto bene, purché tu sia chiaro su quale fuso orario stai convertendo.

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