Autor Zpráva
jarousek
Profil *
Zdravím,

snažím se vymyslet jak zadaná data do inputu převést na datum v javascriptu. Chci aby někdo zadal datum a ten se porovnal s dnešním datumem a z toho pak vznikl rozdíl ve dnech.

http://byty.webkv.cz/nn2.html

toto je funkce co pouzivam

function vypocet()
{
var a = document.getElementById("najem");
var b = document.getElementById("datum");

var aa = a.value;
var bb = b.value;

var aaa = parseFloat(aa);

var dnes = new Date ();
var datum = new Date("januar 1, 2011"); // datum vzniku dluhu

var dnu = 24 * 60 * 60 * 1000;

var dny = dnes.getTime() - datum.getTime();
var pocet_dnu = Math.floor(dny/dnu);

var poplatek1 = pocet_dnu*(25/100);
var poplatek2 = 1+(poplatek1/100);
var poplatek3 = Math.floor(aaa*poplatek2);

var celkem = aaa+poplatek3;

alert("Dluh na nájemném je: "+aaa+",- Kč --- Dlužník je v prodlení: "+pocet_dnu+". den"+" --- Poplatek z prodlení je: "
+poplatek3+",- Kč --- Dluh celkem je: "+celkem+" ,- Kč")
};
_es
Profil
jarousek:
snažím se vymyslet jak zadaná data do inputu převést na datum v javascriptu
Najjednoduchšie je asi na text použiť metódu split:
var p = elementInputu.value.split(/\D/);
V poli p budú časti textu získaného z rozdelenia textu ľubovolnými nečíselnými znakmi. Všetky metódy na prácu s dátumom nájdeš tu.
jarousek
Profil *
Děkuji, takžš jsem řetězec rozdělil pomocí SUBSTR na tři části, ty pak převedl na čísla a dal jako atributy NEW DATE (rok, měsíc, den) a už to funguje jak má
_es
Profil
jarousek:
Děkuji, takžš jsem řetězec rozdělil pomocí SUBSTR na tři části
Ako presne?
Asi ti pri tom bude hroziť viac komplikácií ako pri použití metódy split.
Pomocou metódy split sa dá jednoducho dať návštevníkovi možnosť použiť ľubovolný oddeľovač.
jarousek
Profil *
u zadávání data mají poznámku ať to zadají ve formátu DD.MM.RRRR, ale oddělit to mohou jak chtěji, ja ten údaj potřebuji jen na zjištění datumu, který se odečte od dnešního a vznikne počet dní, což je údaj který je potřebný. Je to počítání dlužného nájemného a návštěvník zadá datum, kdy mu vznikl dluh:

var bb = b.value;

var bbb_den1 = bb.substr(0,2);
var bbb_den2 = parseFloat(bbb_den1);

var bbb_mesic1 = bb.substr(3,2);
var bbb_mesic2 = parseFloat(bbb_mesic1)-1;

var bbb_rok1 = bb.substr(6,4);
var bbb_rok2 = parseFloat(bbb_rok1);

var dnes = new Date ();
var datum = new Date(bbb_rok2, bbb_mesic2, bbb_den2);
_es
Profil
jarousek:
u zadávání data mají poznámku ať to zadají ve formátu DD.MM.RRRR
Prečo ich k tomu nútiť?
Ak zadajú dátum v nejakom obvyklom tvare napríklad 1.10.2011, tak sa z toho tvojho kódu asi vyráta nejaká blbosť.
Prečo požívaš metódu parseFloat, keď existuje aj metóda parseInt - treba zadať aj 10 ako druhý argument.
jarousek
Profil *
tak jsem to nakonec udělal takhle, mělo by být ošetřeno i zadávání D.M.RRRR

var aaa = parseInt(aa,10);
var bbb = bb.length;

var bbb_den1 = bb.indexOf("."); // vyhledá kde je první "."
var bbb_den2 = bb.substr(0,bbb_den1); // ořízne řetězec od pozice 0 do pozice bbb_den1
var bbb_den3 = parseInt(bbb_den2,10); // převede řetězec bbb_den2 na číslo v "10" soustavě

var bbb_rok1 = bb.lastIndexOf(".");
var bbb_rok2 = bb.substr(bbb_rok1+1,bbb);
var bbb_rok3 = parseInt(bbb_rok2,10);

var bbb_mesic1 = bbb-bbb_den2.length*2-bbb_rok2.length;
var bbb_mesic2 = bb.substr(bbb_den1+1,bbb_mesic1);
var bbb_mesic3 = parseInt(bbb_mesic2,10);
_es
Profil
jarousek:
Prečo nepoužiješ oveľa jednoduchšie metódu split, ktorá ešte k tomu prináša funkčnosť navyše - možnosť použitia ľubovolného oddeľovača:
var p = elementInputu.value.split(/\D/);
var den = parseInt(p[0], 10);
var mesiac = parseInt(p[1], 10);
var rok = parseInt(p[2], 10);
jarousek
Profil *
tvoje řešení je super, jen nevím co je (/\D/), to najde číslo v řetezci ? pak by tedy p[0] našlo první číslo a p[1] druhý atd. ?
jarousek
Profil *
jo už je to jasný, to je regulární výraz pro něco co NENÍ číslo...už jsem doma :)

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