Ho letto questo argomento nelle ultime ore e penso di avere una soluzione, ma vorrei una conferma.Il modo migliore per gestire la memorizzazione/visualizzazione di date in fusi orari diversi in PHP?
Situazione
Voglio un utente, per esempio, in California per poter inserire un commento che verrà memorizzato in MySQL. Poi voglio che un utente, per esempio, in Texas, sia in grado di visualizzare il commento con la data del post adattata al suo fuso orario.
Soluzione proposta
Memorizzazione
- Eseguire il seguente all'inizio del l'applicazione in modo che tutte le funzioni di data utilizzano UTC fuso orario:
date_default_timezone_set('UTC');
$Date = new DateTime();
per ottenere un oggetto DateTime con la data e l'ora correnti in UTC.- Utilizzare
$Date->format()
per ottenere il valore da inserire nella colonna di tipo datetime in MySQL.
Visualizzazione
- ottenere informazioni fuso orario dell'utente da JavaScript e conservarla in un cookie.
- Eseguire una query MySQL SELECT per recuperare il valore della colonna datetime.
$Date = new DateTime($row['time']);
per creare un'istanza di un oggetto DateTime con l'ora UTC memorizzata.$Date->setTimezone(new DateTimeZone($userTimezone));
per regolare l'ora UTC al fuso orario dell'utente.- display utilizzando
$Date->format();
E 'questo il senso di ciò che deve essere fatto? Mi manca una soluzione migliore? Grazie per l'aiuto!
Penso che imposterò il cookie timezone sul login utente, quindi dovrebbe aggiornarsi se si viaggia in Australia e si effettua il login da lì. Stai suggerendo che alcuni JavaScript funzionino sul caricamento della pagina che cerca volte in, ad esempio, e li converte tutti al volo? –
L'unico modo per arrivare all'orologio utente è tramite JS o geo-ip. Quest'ultimo è complesso e inaffidabile. Se intendi utilizzare JS in ogni caso, eseguirlo al momento dell'accesso richiede più manutenzione (monitoraggio lato server). Facendolo al volo ha più senso qui. – aleemb
Grazie. Mentre lo cerco di più, sto iniziando ad essere d'accordo con te. –