Najlepszy sposób na przechowywanie / wyświetlanie dat w różnych strefach czasowych w PHP?

Czytam ten temat od kilku godzin i myślę, że sobie z tym poradzę, ale chciałbym mieć jakieś potwierdzenie.

Situation

Chcę, aby użytkownik w Kalifornii mógł dodać komentarz, który będzie przechowywany w MySQL. Chcę, aby użytkownik w Teksasie mógł zobaczyć komentarz z datą postu dostosowaną do jego strefy czasowej.

Proponowane Rozwiązanie

Przechowywanie

  1. uruchom następujące na początku aplikacji tak, aby wszystkie funkcje daty używały strefy czasowej UTC: date_default_timezone_set('UTC');
  2. $Date = new DateTime(); Aby uzyskać obiekt DateTime z bieżącą datą i czasem w UTC.
  3. Użyj $Date->format(), aby uzyskać wartość do wstawienia do kolumny DateTime type W MySQL.

Displaying

  1. pobieraj informacje o strefie czasowej użytkownika z JavaScript i przechowuj je w pliku cookie.
  2. Uruchom zapytanie MySQL SELECT, aby pobrać wartość kolumny datetime.
  3. $Date = new DateTime($row['time']); to tworzy instancję obiektu DateTime z zapisanym czasem UTC.
  4. $Date->setTimezone(new DateTimeZone($userTimezone)); aby dostosować czas UTC do strefy czasowej użytkownika.
  5. wyświetlanie za pomocą $Date->format();
Czy to jest sedno tego, co trzeba zrobić? Brakuje mi lepszego rozwiązania? Dzięki za pomoc!
Author: Justin Stayton, 2009-02-06

2 answers

Można to jeszcze uprościć. Ponieważ używasz JavaScript to dlaczego nie użyć JavaScript, aby dostosować strefę czasową na kliencie, jak również?

  1. Przechowuj wszystkie czasy na serwerze jako UTC
  2. podaj je klientowi jako UTC
  3. klient używa JavaScript dostosuj czas do lokalnej strefy czasowej

To nie tylko ułatwia sprawę, ale także rozwiązuje problem z Twoim modelem. Jeśli zarejestrowałem swoje konto w Nowym Jorku, ale podróżowałem do Australii, chcę zobaczyć The times według australijskiej strefy czasowej. W rzeczywistości korzystanie z JavaScript, którego używasz, może łatwo dostosować ustawienia, dzięki czemu projekt jest jeszcze bardziej dynamiczny. Po drugie, można uniknąć narzutu przechowywania strefy czasowej użytkownika.

To powiedziawszy, jeśli chcesz, aby twój projekt ulegał degradacji do przeglądarek innych niż JavaScript, lepiej skorzystaj z pełnego podejścia po stronie serwera polegającego na plikach cookie HTTP (w przeciwieństwie do polegania na JS do pobierania plików cookie).

 14
Author: aleemb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 01:37:44

Twoje robienie tego Wszelkie prawa. Przechowuj wszystkie daty w UTC(GMT+0), pobieraj je jako takie z bazy danych i stosuj przesunięcie użytkownika.

Zasadniczo masz to wszystko pokryte od początku do końca, naprawdę nie ma nic do dodania, myślę, że nie można zoptymalizować go poza tym, co już robisz.

 3
Author: Filip Dupanović,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 22:43:25