Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] błąd w działaniu mktime/date?
Forum PHP.pl > Forum > Przedszkole
eccocce
Wrzucam do przedszkola, bo pewnie przeoczyłem jakąś głupotę 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 smile.gif I dalej też wszędzie jest o godzinę mniej niż powinno być. Z czego wynika ta różnica?
Chrom
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
eccocce
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 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 smile.gif

Pozdrawiam
Chrom
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ę.
eccocce
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.