Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] błąd w działaniu mktime/date?
eccocce
post
Post #1





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Wrzucam do przedszkola, bo pewnie przeoczyłem jakąś głupotę (IMG:style_emoticons/default/biggrin.gif)
Spójrzcie na kod i wynik tego kodu:
  1. <?php
  2.  
  3. for($i=0; $i < 25; $i++)
  4. {
  5. print date('Y-m-d G:i:s', mktime('0','0','0',10,25,2009)+$i*60*60);
  6. ';
  7. }
  8.  
  9. ?>


wynik:

Kod
2009-10-25 0:00:00
2009-10-25 1:00:00
2009-10-25 2:00:00
2009-10-25 2:00:00
2009-10-25 3:00:00
2009-10-25 4:00:00
2009-10-25 5:00:00
2009-10-25 6:00:00
2009-10-25 7:00:00
2009-10-25 8:00:00
2009-10-25 9:00:00
2009-10-25 10:00:00
2009-10-25 11:00:00
2009-10-25 12:00:00
2009-10-25 13:00:00
2009-10-25 14:00:00
2009-10-25 15:00:00
2009-10-25 16:00:00
2009-10-25 17:00:00
2009-10-25 18:00:00
2009-10-25 19:00:00
2009-10-25 20:00:00
2009-10-25 21:00:00
2009-10-25 22:00:00
2009-10-25 23:00:00


$i leci od 0 do 24, występuje w działaniu mktime(...) + $i*60*60, czyli zwiększamy wynik mktime kolejno o 0,1,2,...,24 godziny. No i tutaj pojawia się problem (jak widać w wynikach) - gdy $i = 3 mktime powinno się zwiększyć o 3 godziny, a zwiększa się o 2 (IMG:style_emoticons/default/smile.gif) I dalej też wszędzie jest o godzinę mniej niż powinno być. Z czego wynika ta różnica?
Powód edycji: [Ociu]: Poprawiłem bbCode
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Chrom
post
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 17
Dołączył: 28.12.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


25 października przesuwamy zegarki z 3 na 2 dlatego 2 razy masz 2 godzinę zmień dzień lub miesiąc i będzie ok
tak samo będzie dla daty 10,31,2010

Ten post edytował Chrom 26.10.2009, 19:40:16
Go to the top of the page
+Quote Post
eccocce
post
Post #3





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ok, dzięki za odpowiedź. Czyli dwa razy do roku mamy sytuacje ze zmianą czasu (godzina do przodu, godzina do tyłu) i wtedy mogą występować anomalie w działaniu skryptów (IMG:style_emoticons/default/tongue.gif)

Czyli jeśli chcę wynik z mktime mieć o 1 dzień większy (86400 s), to najbezpieczniej chyba dodać po prostu 1 na polu od dnia w funkcji mktime prawda? Ew. można wziąć uwagę na te dni w roku kiedy przesuwamy godzinę, ale te dni w sumie chyba wypadają dosyć różnie, więc nie będzie to zbyt wygodne (IMG:style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
Chrom
post
Post #4





Grupa: Zarejestrowani
Postów: 240
Pomógł: 17
Dołączył: 28.12.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


W całej Unii Europejskiej w ostatnią niedzielę marca o 1:00 zegary przestawia się godzinę do przodu, a w ostatnią niedzielę października o 2:00, o godzinę do tyłu.

mając te dane można ułożyć całkiem niezłą funkcję.

Ten post edytował Chrom 26.10.2009, 22:10:40
Go to the top of the page
+Quote Post
eccocce
post
Post #5





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Chrom @ 26.10.2009, 22:08:04 ) *
W całej Unii Europejskiej w ostatnią niedzielę marca o 1:00 zegary przestawia się godzinę do przodu, a w ostatnią niedzielę października o 2:00, o godzinę do tyłu.

mając te dane można ułożyć całkiem niezłą funkcję.

Racja, w sumie to mniej roboty niż się spodziewałem. Dla Polski to będzie godzina 2:00 w ostatnią niedzielę marca (a właściwie to już poniedziałek) i 3:00 jeśli chodzi o przesunięcie w październiku.
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.12.2025 - 00:21