Autor Zpráva
HelenaO
Profil
Dobrý den,

mám 3 formulářová pole. Do dvou zapíšu různá data (např. 13.8.2009 a 15.8.2009) a ve třetím chci mít počet dní, kolik je mezi těmito dvěma daty včetně krajních hodnot (tedy 3).

Poraďte mi, prosím, jak to mám udělat. Už pár hodin pročítám diskuse a nedaří se mi to rozchodit :-( Jak mám Javascriptu říct, že obsahem pole je datum?

Děkuju moc
_es
Profil
Jak mám Javascriptu říct, že obsahem pole je datum?
Musíš to brať ako obyčajný text, potom to previesť to na dátum a potom z tých dvoch dátumov vypočítať rozdiel v dňoch.
peta
Profil
jakpsatweb.cz - javascript - objekt date / priklady
http://www.volny.cz/peter.mlich/jpw/#cas
nevim, jak je to v prikladech na jpw, ale v me uprave je to odpocet data

A plati, co napsal ES, v tomto pripade musis nejdriv prevest retezce na datumy.
HelenaO
Profil
Můžete, prosím, alespoň naznačit, jak převedu text na datum?

Díky oběma za odpovědi. Návody nastuduju, snad se mi to spojí a rozlousknu to. Pěkný den!
Joker
Profil
HelenaO:
Můžete, prosím, alespoň naznačit, jak převedu text na datum?
var datum = new Date("14.8.2009");

anebo přes set... metody objektu Date.
_es
Profil
HelenaO
function f(x,y){
  var xa = x.split(/\D/), ya = y.split(/\D/);
  var xd = Date.UTC(xa[2], xa[1]-1, xa[0]), yd = Date.UTC(ya[2], ya[1]-1, ya[0]);
  return (yd - xd)/86400000;
}

Funkcia f vypočíta, o koľko v dňoch je väčší dátum y ako x.
Formát: deň.mesiac.rok
Oddeľovač môže byť hocičo okrem číslic.
_es
Profil
Joker
new Date("14.8.2009");

Nie je isté, aký bude výsledok pri rôznych prehliadačoch, pri rôznych národných nastaveniach, jazykoch a pod.
HelenaO
Profil
Pro začátek předpokládám lokální užití - tedy off-line a pouze v ČR. I když se opakuju, stejně moc děkuju za rady! Budu zkoušet. Pěkný víkend všem
_es
Profil
HelenaO
Tým "nie je isté" som myslel to Jokerovo riešenie.
AM_
Profil
_es
to tvé taky "nie je isté", pokud se budou ty data nacházet jedno v letním a jedno v zimním čase, nebude mít jeden den 864000 sekund a ten výpočet vrátí nějaký desetinný balast. Jinak v UTC tuším existují i přestupné sekundy (1-2x do roka). Alespoň to chce výsledek zaokrouhlit, pokud se nebude počítat rozdíl data v rámci desítek tisíc let, mělo by to být přesné.
_es
Profil
AM_
to tvé taky "nie je isté"

Myslím, že tá funkcia pri správnom formáte nemôže vrátiť necelé číslo.
V UTC nie je letný a zimný čas.
Prestupné sekundy vo vstavaných funkciách JavaScriptu nie sú uvažované.
To by sa vtedy nemohlo vôbec počítať s budúcimi dátumami, keďže nie je vopred presne známe, ako sa bude meniť rotácie Zeme.
Alebo teda uveď nejaké konkrétne dva dátumy.
AM_
Profil
_es
aha tak jestli se tam tohle neuvažuje tak máš asi pravdu, já někde četl, že UTC s přestupnými sekundami právě nějak počítá (lze to jednoduše zkusit - dát tam 2 datumy alespoň několik let od sebe), ale je možné, že počítačové implementace s ní skutečně nepočítají, je pravda, že těžko to předvídat dost dopředu.
_es
Profil
AM_
těžko to předvídat dost dopředu.
Ono to ani predvídať nejde, v dlhšom časovom období to ovplyvňuje aj ľudstvo - napríklad veľké vodné nádrže.
A ani bez toho vplyvu to asi nie je nejako presne vypočítateľné.

že počítačové implementace s ní skutečně nepočítají
Počítajú asi tak, že sa tá sekunda "opraví" v rámci automatickej aktualizácie času.
Takže časový úsek vyrátaný z rozdielu dvoch zaznamenaných časov potom nemusí zodpovedať skutočnosti.
No teoretické výpočty s vymyslenými časmi sú bezchybné.
HelenaO
Profil
Natrápila jsem se s tím několik hodin a stále nic. Už pomalu klesám na mysli. Vašim pokročilým diskusím už ani nerozumím :-( Poněkud jste přesáhli množinu toho, co dokážu pochopit ;o) Zkusím ještě jednou předestřít, co potřebuju. Je to nejspíš primitivní, ale snad se neurazíte.

Můj html soubor kromě jiného obsahuje:
<form name="formular">
<input type="text" name="pocatek">
<input type="text" name="konec">
<input type="text" name="trvani">
</form>


můj externí javascript kromě jiného obsahuje:
function spocitejtrvani(){
var f = document.formular;
f.trvani.value = f.konec.value - f.pocatek.value;
}


Ale tohle funguje jenom, když do formulářových polí "pocatek" a "konec" dám obyčejná čísla. Spočítá se rozdíl.
Jakmile do těchto polí vepíšu datumy (do formulářových polí hodlám vepisovat různé datumy (ve formátu dd.mm.yyyy) a chtěla bych, aby se mi ve 3. poli ukázal počet dní, který je mezi těmito 2 daty), tak to nepočítá. Už jsem se naučila vyextrahovat z datumů vepsaných v polích jenom číslovky (použila jsem substr() ). Ale dál nevím, co s tím.

Skripty, které používám jsou z jednodušších - podmínky (if, else - pokud je přepínač na hodnotě 3, napiš do pole číslo 20 atd.), sčítání, odčítání, násobení, a to zpravidla v souvislosti právě s formulářovými poli.

Mějte se mnou, prosím, ještě trpělivost a zkuste mi ještě poradit. Díky moc!
_es
Profil
HelenaO
Celý obsah funkčného súboru:
<!DOCTYPE HTML>
<form id=formular>
<input type="text" id=p>
<input type="text" id=k>
<input type="text" id=t>
</form>
<script>
var p = document.getElementById("p");
var k = document.getElementById("k");
var t = document.getElementById("t");
p.onchange = k.onchange = p.onclick = k.onclick = p.onkeyup = k.onkeyup = p.onblur = k.onblur = v;
function f(x,y){
  var xa = x.split(/\D/), ya = y.split(/\D/);
  var xd = Date.UTC(xa[2], xa[1]-1, xa[0]), yd = Date.UTC(ya[2], ya[1]-1, ya[0]);
  return (yd - xd)/86400000;
}
function v(){t.value = f(p.value, k.value);}
</script>
HelenaO
Profil
Óóóóó velkomožný vezíre _es!

Tisíceré díky!!! Sice tomu až tak úplně nerozumím (no dobrá, přiznávám, vůbec tomu nerozumím - zejména f(x,y), ale nebudu chamtivá, stačí mi, že to fachá) a nepodařilo se mi to zapracovat do svého externího js souboru, ale musela jsem to bídně zkopírovat a prsknout do svého html souboru, ale funguje to!!! Ještě teď kroutím hlavou. To je úžasné! Děkuji opravdu mnohokrát. Revanšovat se bohužel nemám čím. Moje rady ohledně html nebo js by sotvakomu pomohly...

Když už data počítají, jdu to nějak vzhledově počesat pomocí css.

Ještě jednou děkuju!

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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