Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Novacek 06. 11. 2017, 16:03:06

Název: PHP while s rozsahem datumů
Přispěvatel: Novacek 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.
Název: Re:PHP while
Přispěvatel: Jenda 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.
Název: Re:PHP while s rozsahem datumů
Přispěvatel: Novacek 06. 11. 2017, 17:41:15
Dekuji! Uz to funguje.
Název: Re:PHP while s rozsahem datumů
Přispěvatel: Trupik 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é (http://php.net/manual/en/datetime.add.php).