Autor Zpráva
Honza K.
Profil *
Dobry den,

pomoci js kalendare zadavam do jednoho inputu datum ve formatu DD.MM.YY (napr. 07.09.2009) a pak mam jeste druhy input, do ktereho chci presunout datum z prvniho, ale o jeden den vyssi (takze podle prikladu 08.09.2009).
Javascriptu moc nehovim, hledal jsem na internetu, ale nic kloudneho nenasel. Jedine co se mi povedlo, je dostat datum z prvniho inputu do druheho, ale nevim jak s tim dnem +1. Byl bych moc vdecny za pomoc.

Kod:

<input type="text" value="'.$rez_datumIn.'" name="rez_datumIn" maxlength="10" class="datum" onchange="document.forms[0].rez_datumOut.value=this.value" />
<input type="text" value="'.$rez_datumOut.'" name="rez_datumOut" maxlength="10" class="datum" />


Predem dekuju.
fajzen
Profil
<script language="javascript">
function pridajDen()
{
    var pattern= new RegExp(/^\d{2}\.\d{2}\.\d{4}$/);
    var date_str= document.forms[0].rez_datumIn.value;

    if(pattern.test(date_str) != true) {
        // hodnota v políčku rez_datumIn nemá správny formát
    } else {
        var date= new Date();
        var parts= date_str.split('.');

        date.setDate(parts[0]);
        date.setMonth(Number(parts[1]) - 1);
        date.setFullYear(parts[2]);

        date.setTime(date.getTime() + 1000 * 60 * 60 * 24); // pridáme 1 deň
        document.forms[0].rez_datumOut.value= (date.getDate() < 10 ? '0' : '') + date.getDate() + '.' + (date.getMonth() + 1 < 10 ? '0' : '') + (date.getMonth() + 1) + '.' + date.getFullYear();
    }
}
</script>

<input type="text" value="'.$rez_datumIn.'" name="rez_datumIn" maxlength="10" class="datum" onkeyup="pridajDen();" />
<input type="text" value="'.$rez_datumOut.'" name="rez_datumOut" maxlength="10" class="datum" />


Navrhujem naviazať funkciu radšej na udalosť onkeyup, pretože onchange sa mi spustilo až keď prvé pole stratilo focus (testované vo FF)

// edit: teraz som si všimol, že hodnota prvého poľa sa zadáva cez JS, takže onkeyup nevyhovuje
Honza K.
Profil *
2fajzen: dekuju moc, funguje to naprosto korektne .. dal jsem tam udalost onchange a je to ok.
Honza K.
Profil *
Dobry den,

znovu oteviram toto tema, jelikoz jsem si vsiml, ze tento skript (napsany zde fajzenem, [#2]) nefunguje uplne spravne a nemuzu najit chybu.
A to v pripade, ze vstupni datum (rez_datumIn), respektive den je vetsi nez 28 (v tom pripade vraci nesmysly, viz priklady nize).

Pointa je, ze ma pridat +1 den ke vstupu rez_datumIn

Příklady chyb: vstup (rez_datumIn) - vystup (rez_datumOut)
29.01.2010 -> vrati 02.01.2010
30.03.2010 -> vrati 03.03.2010
31.03.2010 -> vrati 04.03.2010
... atd.

Dekuju predem za pomoc.
Chamurappi
Profil
Reaguji na Honzu K.:
Nejjednodušší záplata: Otoč pořadí řádků 13 až 15.
Když nechává fajzen vyrobit new Date(), naplní se aktuálním časem, teď tedy nějakým únorovým datumem. Jakmile nastaví den v měsíci vyšší než 28, ten přeteče přes délku února a dostane se na začátek března, pak teprve nastavuje měsíc (na správnou hodnotu) a rok. Moc pěkná nášlapná mina :-)

Řádky 10 až 17 by měly jít napsat stručněji takto:
        var parts = date_str.split('.');
        var date = new Date (parts[2], parts[1] - 1, parts[0] + 1);
(To přičtení jedničky je přidání dne — přetečení na hranici měsíců se děje automaticky.)
Honza K.
Profil *
2Chamurappi: Diky moc! A ja porad dumal, kde je ta chyba :-) Ted uz to opravdu funguje, jak ma.

Vyreseno.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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