Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Novacek 06. 11. 2017, 16:03:06
-
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.
-
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.
-
Dekuji! Uz to funguje.
-
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).