Autor Zpráva
amorekj
Profil
Dobrý den,
napsal jsem nebo spíš jsem se pokusil o trochu svůj skript tak se prosím nezlobte za mou kvalitu, nicméně nefunguje. Má to být skript, který vypíše datumy, které jsou třeba mezi 02.10.2014 a 15.01.2015. :) Byl bych moc rád, kdybyste mi chybu pomohli najít nebo mě někam přesměrovali - jaká funkce se kde může použít.

Do databáze zapisuji 2 datumy (od - do). Název datumů + informace jejich. Jsem teprve na začátku a řeším jak je všechny vypsat, poté bych rád vyřešil jak k datumům přiřadit název a informace. Rád bych vytvořil pomocí toho kalendář - skript na kalendář mám.

Píše mi to:
Warning: mktime() expects parameter 6 to be long, string given in __ on line 40 (zacyklovává se to)

while ($zaznam = mysql_fetch_array($vypis )){

echo $zaznam["od"]."-".$zaznam["do"].":";
    $day_num = SubStr($zaznam["od"], 1, 2);
    $days_in_month = date('t', mktime(0,0,0,SubStr($zaznam["od"], 3, 4), 1, SubStr($zaznam["od"], 6, 10)));
    while ($zaznam["od"] = $zaznam["do"]){
            while ($day_num <= $days_in_month){
                echo $zaznam["od"];
                $zaznam["od1"] = SubStr($zaznam["od"], 1, 2) + 1;
                $zaznam["od2"] = SubStr($zaznam["od"], 3, 4);
                $zaznam["od3"] = SubStr($zaznam["od"], 6, 10);
                $zaznam["od"] = $zaznam["od1"].".".$zaznam["od2"].".".$zaznam["od3"]; 
                $day_num++;
            if ($day_num == $days_in_month){ 
                if(SubStr($zaznam["od"], 3, 4) != 12){ 
                    $day_num = 1;
                    $zaznam["od2"] = SubStr($zaznam["od"], 3, 4) + 1;
                    $zaznam["od3"] = SubStr($zaznam["od"], 6, 10);
                    $zaznam["od"] = "01.".$zaznam["od2"].".".$zaznam["od3"];
                    $days_in_month = date('t', mktime(0,0,0,$zaznam["od2"], 1, $zaznam["od3"]));
                }else{
                    $zaznam["od3"] = SubStr($zaznam["od"], 6, 10) + 1;
                    $days_in_month = date('t', 1, 1, $zaznam["od3"]);
          $zaznam["od"] = "01.01.".$zaznam["od3"];
                    $day_num = 1;    
                }
            }
    }
}
}

Děkuji všem za nápady a rady :)
DJ Miky
Profil
Jednodušší řešení, než ručně skládat data, je využít funkce strtotime() a posouvat datum na další den pomocí argumentu '+ 1 day':

$pocatecni = '02.10.2014';
$koncove = '15.01.2015';

$datum = strtotime($pocatecni);
$zarazka = strtotime($koncove . ' + 1 day');  // je potřeba nastavit zarážku o den později, aby se vypsal i poslední den
while($datum < $zarazka) {
  $formatovany = date('d.m.Y', $datum);
  
  // zde si můžeš datum vypsat nebo s ním dále pracovat
  echo $formatovany, "\n";
  
  $datum = strtotime($formatovany . ' + 1 day');  // posun na další den
}

Tvůj skript se cyklí kvůli podmínce:
while ($zaznam["od"] = $zaznam["do"]){
Jedno rovnítko značí přiřazení a tato podmínka bude platit vždy (pokud $zaznam["do"] neobsahuje nulu).
Joker
Profil
amorekj:
zacyklovává se to
Ano, výsledkem tohoto:
    while ($zaznam["od"] = $zaznam["do"]){
může být buď žádný cyklus (pokud $zaznam["do"] se vyhodnotí jako false), nebo nekonečný cyklus (pokud se to vyhodnotí jako true.)
Nějak nevím, jak ta podmínka má být správně.

Jinak bych použil podobné řešení jako DJ Miky.
Ale ohledně jedné nedávné diskuse, tohle vypadá jako vhodný příklad pro do-while cyklus (resp. v závislosti na situaci, jestli se mají vypisovat i hraniční dny).
amorekj
Profil
Děkuji moc :) To je přímo geniální řešení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: