Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Obsługa stref czasowych, i czasu zimowego/letniego
tomahawk
post
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
Go to the top of the page
+Quote Post
Noidea
post
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.
Go to the top of the page
+Quote Post
tomahawk
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 15:10