21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
rew
Profil
Dobrý den,

vytvořil jsem si dvě textová formulářová pole pro datum, která pomocí javascriptu testuji na správnost zadaného data (dd.mm.rrrr). Toto mi funguje výborně. Ale mám problém v tom, že potřebuji, aby datum prvního pole byl vždy menší než datum v zadaném druhém poli. Tedy, aby uživatel nezadal například 1P: 20.2.2015 2P: 19.1.2015. Aby jej to upozornilo a neumožnilo odeslat formulář.
Zkoušel jsem něco jako:
if(document.forms["formular"]["datum_od"].value <= document.forms["formular"]["datum_do"].value)

ale nefunguje regulerně.

Datum se vkládá ve tvaru dd.mm.rrrr

Díky
_es
Profil
rew:
pomocí javascriptu testuji na správnost zadaného data
A testuješ to ako? Predsa keď vieš otestovať platnosť dátumu, tak snáď vieš aj porovnať, ktorý dátum z dvoch je skorší.
rew
Profil
_es:
Testuji oba datumy tímto, a tím nezjistím, který je větší.
function kontrola_data(value)
    {
      if(value == "") return false;
      var datum_pole = value.split(".");
      if(datum_pole.length != 3) return false;
      var dt = new Date(datum_pole[2], datum_pole[1]-1, datum_pole[0]);
      if(dt.getDate() != datum_pole[0]) return false;
      if(dt.getMonth()+1 != datum_pole[1]) return false;
      return true;
    }
_es
Profil
[#3] rew:
V uvedenej funkcii je dt.getTime() počet milisekúnd od 1.1.1970 UTC - to by ti snáď malo stačiť.
rew
Profil
_es:
Nevím si už rady, zkoušel jsem všechno možné, ale nejde mi přenést výsledek getTime mimo tuto funkci, abych to mohl porovnat.

Můj celý kód javascriptu je:

<script type="text/javascript">
    // test validace zadaného data
    function test_data()
    {
      var datum_od = kontrola_data(document.forms["formular"]["datum_od"].value);
      var datum_do = kontrola_data(document.forms["formular"]["datum_do"].value);
      
      if (datum_od == true && datum_do == true)
      {
        
        if(document.forms["formular"]["datum_od"].value <= document.forms["formular"]["datum_do"].value)
        {
          return true;
        }
        else
          {
            alert('UPOZORNĚNÍ: Opravte datum, datum od je vyšší než datum do!');
            return false;
          }
      }
      else
        {
          alert('UPOZORNĚNÍ: Chybný formát data (dd.mm.rrrr) nebo datum přestupného roku!');
          return false;
        }           
    }
    
    function kontrola_data(value)
    {
      if(value == "") return false;
      var datum_pole = value.split(".");
      if(datum_pole.length != 3) return false;
      var dt = new Date(datum_pole[2], datum_pole[1]-1, datum_pole[0]);
      if(dt.getDate() != datum_pole[0]) return false;
      if(dt.getMonth()+1 != datum_pole[1]) return false;
 //     pomocna = dt.getTime();
//      alert(pomocna);
      return true;
    }
    
               
    </script>

Řádek 11 bych chtěl upravit na regulérní podmínku, ale prostě se i nedaří dostat počet ms z té druhé funkce.
_es
Profil
rew:
Všetky potrebné rady predsa máš - ako z dátumov dostať čísla a tie ti stačí len porovnať. Veď si ani metódu getTime nepoužil, tak čo si „skúšal“? Kde„mimo funkciu“ to chceš „prenášať“, prečo všetky kontroly nespravíš v jednej funkcii? V tvojom kóde máš aj odkazy na dokumentáciu Mozilly.
rew
Profil
_es:
Možná to špatně popisuji, ale používám funkci kontrola_data pro kontrolu datumu, jestli je korektní, mohl bych provést třeba v 10 formulářích a budu mít furt jen jednu funkci. Když použiji v této funkci, která je volána z jiné funkce (test_data) get.Time() a následně aletr, tak mi vypíše počet ms. To je super to potřebuji, ale jakmile provede kontrolu dalšího data, tak se vypíše zase jiný údaj, taky to co chcil. Ale teď nevím, jakým způsobem bych dostal na řásek č. 11 do podmínky tyto dvě čísla zastupující ms k porovnání. Zkoušel jsem použít dvě funkce pro kontrolu data 1 a 2. Když použiji proměnné ve funkci kontrola_data_1 a kontrolo_data_2, tak ve funkci test_data tu proměnnou již nemám. Potřebuji ji jen nějakým způsobem přenést. Kód mám defakto celý hotový, jen mi chybí tady toto.
Pokud bych to měl udělat v jedné funkci, tak se mi to nedařilo.
Možná kdyby jsi mi pomohl sem něco napsat.

Díky
_es
Profil
[#7] rew:
Ak skontroluješ platnosť dátumu, tak potrebuješ vždy aj skontrolovať, či sú dátumy v správnom poradí, tak to sprav všetko v jednej funkcii a volaj ju pri zmene jedného alebo druhého inputu.
rew
Profil
Tak nakonec jsem to vyřešil úplně jinak, zvolil jsem formu výběrového menu, a vytvořil test na přestupný rok a regulérní počty dní v měsíci.

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:

0