![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Witam,
mam problem natury logicznej: w jaki sposób pobrać offset strefy czasowej, która w aktualnej godzinie ma północ? Kombinowałem na różne sposoby, posiłkowałem się tym ale cały czas nie ogarniam tego :| Googlowanie niestety również nic nie pomogło. Pozdrawiam, pion
Powód edycji: [phpion]: Przeniosłem do algorytmów
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Hmm
-24 + aktualna godzina + aktualny offset strefy czasowej. Jeżeli wynik jest mniejszy lub równe od -12 to dodajemy do niego 24. Np dla teraz (godzina 12, strefa czasowa +1) wychodzi -11 (i to się zgadza). godzina 10, strega czasowa + 1, wychodzei - 13 . Ale skoro jest jest mniejsze od -12 więc... -13 + 24 = GMT + 11. I to się zgadza. |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
A teraz sprawdź dla godziny 01:00. Biorąc pod uwagę, że serwer stoi w Polsce (przesunięcie +1) powinniśmy otrzymać w wyniku 0 (o tej godzinie północ jest w Irlandii), a mamy 2.
@thek: Widzę, że tu jesteś - pomóż (IMG:style_emoticons/default/smile.gif) Na razie z wykorzystaniem http://www.timezoneconverter.com/cgi-bin/tzc.tzc zrobiłem sobie mapę - może komuś się przyda:
Za bardzo nie miałem tego jeszcze jak przetestować, ale powinno być ok. Kluczem jest godzina (np. 10 oznacza 10:00, 10.5 to 10:30), a wartością offset. Trochę niepokoi mnie godzina 00:30 i 01:30 - wygląda jakby północ mogła być w 2 strefach czasowych (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Hmmm, nie bardzo potrafię tego użyć. Jakie wartości podstawić pod $godzina i $strefa_czasowa by będąc aktualnie w strefie GMT+1 i mając godzinę 01:00 otrzymać offset strefy 0?
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Ta "funkcja" zwraca Ci info w jakiej strefie czasowej jest aktualnie północ.
Tak więc po przeróbkach
Przenoszę do "php". |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wywala się np. dla:
Powinno zwrócić 1, a zwraca -1. Ale walić to, dzięki za zainteresowanie - zostawię sobie tą tablicę i spokój (IMG:style_emoticons/default/smile.gif) PS: Sam przeniosłem do Algorytmów bo sądziłem, że w końcu powstanie gotowa funkcja. Ale ok, niechaj będzie PHP. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
OK... lecę... taki kod wymodziłem (IMG:style_emoticons/default/wink.gif)
PS... Zwróćcie uwagę, że jednego dnia moga być daty z północą w PRZYSZŁOŚCI i PRZESZŁOŚCI! Dla naszej strefy czasowej wypada to około połuudnia... Pewnie bym tego nie zauważył, ale Wiki stwierdziła, że z racji przesunięć, zakres jest nie od -12/+12, ale -12/+14 (IMG:style_emoticons/default/smile.gif) Sorki za małego byka przy wyświetlaniu (IMG:style_emoticons/default/wink.gif) Dla 1 w nocy poda datę o dzień w przód, choć strefę czasową podaje wtedy prawidłowo... Gdyż date('H', $timestamp ) zwróci 23. Zakwalifikuje więc datę do przyszłości, choć offset będzie prawidłowy w wyniku. tak więc by nie mylić, zwracaj tylko uwagę na offset. I porównuj do naszego offsetu dla strefy czasowej.
Powód edycji: [thek]: EDIT
|
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Chyba znowu nie do końca działa poprawnie. Podaj jako godzinę 0 - powinno zwrócić 1, a zwraca 0, dla godziny 1 powinno zwrócić 0, a zwraca -1. Ja już sobie to daruję, mam tablicę i starczy.
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Oba kody więc mają byka... Mój wali się w dniach, ale jest bezbłędny co do offsetów, a u wookieb'a na odwrót (IMG:style_emoticons/default/biggrin.gif)
Wersja php 5.3.5 $date = new DateTime( '2011-06-28', new DateTimeZone('Europe/Warsaw' ) ); $date->setTime(0,0); Output: Cytat 2011-06-28 00:00:00 Jest strefa z polnoca w przyszlosci: 2011-01-29T00:00:00+02:00 I jest to prawda... tylko że nie 29, ale 28 (IMG:style_emoticons/default/smile.gif) Ponieważ dla północy naszego czasu jesteśmy w strefie prawidłowo wyliczonej. Na chwilę obecną mamy bowiem DST, czyli nie +1, ale +2 w porównaniu do UTC. Zresztą można to prosto sprawdzić... $date->getOffset() zwrócić powinien 7200 sekund różnicy, czyli 2 godziny... Daj 1 w nocy: Output: 2011-06-28 01:00:00 Jest strefa z polnoca w przyszlosci: 2011-01-29T00:00:00+01:00 Daj 2 w nocy: Output: 2011-06-28 02:00:00 Jest strefa z polnoca w przeszlosci: 2011-01-28T00:00:00-00:00 Bingo... Zniwelowaliśmy wpływ Strefy czasowej, która wynosi +02:00 Jedyna rzecz której temu kawałkowi kodu brakuje to prawidłowe wyłapanie daty... Trzeba bowiem dzień ustalać pod kątem offsetu strefy czasowej w $date A teraz dla porównania: nasz 17: 2011-06-28 17:00:00 Jest strefa z polnoca w przyszlosci: 2011-01-29T00:00:00+09:00 Czemu tak? 17+9 = 26... Ale jesteśmy w +2 czyli tyle na minus -> 24... Jest północ? Jest (IMG:style_emoticons/default/smile.gif) I dla efektu... 14 2011-06-28 14:00:00 Jest strefa z polnoca w przyszlosci: 2011-01-29T00:00:00+12:00 Jest strefa z polnoca w przeszlosci: 2011-01-28T00:00:00-12:00 Północ dziś i jutro jak zwrotka. Sam sprawdź. Dla 13 Wookieb odrzuci datę w przyszłości... Ponieważ dla niego +13 nie pasuje z racji modulo. Ale myślę, że trochę przeróbek i gdyby uwzględnił zakres -12/+14 to by wychwycił ową zgubioną strefę. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 04:07 |