PHP while s rozsahem datumů

Novacek

PHP while s rozsahem datumů
« kdy: 06. 11. 2017, 16:03:06 »
Kód: [Vybrat]
while( $date<=$dateTo ){
                                   echo $date."<br>";
                                   $date = date("Y-m-d",($date));
                                   // Some code goes here
                                   $date=strtotime($date) + 86400;

}

Pokud zadam rozmezi datumu  10/01/2017 - 11/16/2017 skript se zastavi na

1509314400
2017-10-29

Jine rozmezi datumu funguje normalne :/ Vubec nemam poneti kde je chyba.
« Poslední změna: 06. 11. 2017, 16:45:58 od Petr Krčmář »


Jenda

Re:PHP while
« Odpověď #1 kdy: 06. 11. 2017, 16:29:19 »
Samotný unixový timestamp nenese informace o timezone a ignoruje přestupné sekundy. A tím sis naběhl (ve tvém případě nejspíš přechod CET/CEST). Použij timezone bez těchto věcí nebo použij nějakou pokročilejší knihovnu pro práci s časem.

Novacek

Re:PHP while s rozsahem datumů
« Odpověď #2 kdy: 06. 11. 2017, 17:41:15 »
Dekuji! Uz to funguje.

Trupik

Re:PHP while s rozsahem datumů
« Odpověď #3 kdy: 06. 11. 2017, 21:35:22 »
Doplním, že Tvoj príklad je založený na chybnom predpoklade, že deň má 24 hodín. Niektoré dni bohužiaľ prechodom medzi letným a zimným časom majú 25 hodín a niektoré zase 23 hodín. Takže ak začneš s nejakým náhodným časom (napr. vstup od užívateľa, alebo výstup funkcie time()), pripočítaš ku nemu 24 hodín, a čakáš, že budeš na ďalšom dni, tak to nie vždy naozaj musí takto dopadnúť. Niekedy tak skončíš v tom istom dni (ak mal 25 hodín), a niekedy zase skončíš o dva dni ďalej (ak mal 23 hodín).

Než dávať zakaždým pozor na tieto záludnosti, je lepšie nechytračiť a použiť knižničné funkcie na manipuláciu dátumov a časov určené.