Sto sviluppando un sito Web in cui devo gestire diversi possibili fusi orari dagli utenti. Questo diventa un grande problema dal momento che il sito ospita eventi delicati nel tempo come le aste.Come gestire i fusi orari tra server e client?
Tutte le date/orari sul server sono in UTC. Il database archivia tutto nei timestamp UTC. Anche il fuso orario predefinito di PHP è impostato su UTC (date_default_timezone_set('UTC');
).
Ora, il mio problema è come dovrei interagire con gli utenti, se sto mostrando solo una data o, ancora più importante, sto leggendo la data/ora da input dell'utente.
Un esempio concreto:
- ad un'asta ha una scadenza, che devo conservare nel database come UTC.
- Quando visualizzo l'asta sul sito Web, un timer javascript utilizza un oggetto
Date
per calcolare il tempo rimanente. Converte automaticamente il fuso orario in GMT + 0100 (il mio fuso orario locale). Quindi se la scadenza è'2013-08-08 10:46:08'
(UTC), l'oggetto data javascript restituiràAug 08 2013 11:26:15 GMT+0100 (GMT Standard Time)
. - Se l'ora corrente è maggiore di 11:46:08, il timer indica che il tempo rimanente è 00:00 (che è corretto).
Ma se provo ad inserire un'offerta, il server accetta poiché la condizione sulla
MySQL INSERT
viene valutata atrue
:INSERT INTO offerte ... Dove ... E auction_deadline> NOW() ...
(perché auction_deadline = '2013-08-08 10:46:08'
e NOW() = '2013-08-08 10:26:50'
)
Tutto questo mumbo Jumbo di fuso orario si scioglie il mio cervello. Cosa mi manca qui? Sono quasi sicuro che memorizzare tutte le date/orari in UTC all'interno del database sia il migliore. Non riesco a pensare in modo chiaro come gestirlo tra l'utente e il database.
Se hai bisogno di un codice per chiarire la mia domanda, dillo per favore. –