![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Głowie się od pewnego czasu nad obsługą stref czasowych. Ogólnie sprawa wygląda tak że zapisuję zawsze do bazy datę w formacie unixowym dla strefy GMT +0. Czyli ustawiam w php strefe czasu na na Europe/Dublin i to co zwraca time() wrzucam do bazy. Teraz tylko przy wyświetlaniu pobieram ten czas i dodaje do niego 3600 razy przesunięcie godzinowe strefy czasowej która wybrał użytkownik. Wszystko jest cacy... tylko że po zmianie czasu np. z zimowego na letni już nie będzie. Na dodatek w tej samej strefie czas zimowy i letni trwa różnie... tzn. u nas jest teraz zimowy a gdzieś daleko na południe (w tej samej strefie) mają letni (IMG:style_emoticons/default/nerdsmiley.png) Jak to wszystko poskładać żeby nikt nie osłupiał od złej daty? I czy ten manual php.net jest świetny czy jednak rzeczywiście nie ma tam informacji czy czas z time() jest zimowy czy letni? No właśnie jaki jest? Oczywiście nie chcę tak żeby użytkownik musiał stale pilnować jaki ma czas i zmieniać z zimowego na letni i odwrotnie. On ma tylko raz ustawić sobie strefę. Ten post edytował tomahawk 15.02.2011, 22:29:52 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Użyj klas DateTime i DateTimeZone (ewentualnie odpowiedników w postaci funkcji). Mają one wbudowaną obsługę czasu letniego. Przykładowo Polska(Warszawa) leży w tej samej strefie czasowej co Namibia(Windhuk) - http://pl.wikipedia.org/wiki/UTC%2B1:00 - oba te państwa używają czasu letniego, ale leżą na dwóch różnych półkulach, więc przechodzą na czas letni w innym momencie. Pomimo to DateTime sobie z tym radzi:
http://ideone.com/rF8iV Cytat I czy ten manual php.net jest świetny czy jednak rzeczywiście nie ma tam informacji czy czas z time() jest zimowy czy letni? No właśnie jaki jest? time() zwraca liczbę sekund które upłynęły od 1 stycznia 1970 00:00:00 GMT. Liczba sekund nie ma wersji letniej i zimowej. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
No fakt jeżeli dam
$warsawTime = new DateTime( "now", $warsawTZ ); To data jest jak najbardziej poprawna. Ale jeżeli chcę wyświetlić jakąś inną datę to co mam dać zamiast "now" ? Próbowałem dać tam znacznik czasu z time() (zapisany wcześniej do bazy danych) i niestety np. dla naszej strefy godzina jest błędna (1h za mało). Ten post edytował tomahawk 16.02.2011, 13:33:44 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 15:10 |