Hi!
Van 3 input mező. Az első két mező date tipusu, a bevitel éééé-hh-nn ba engedélyezett.
A harmadik beviteli mező egy szám mező pozitív egész számokat fogad el.
Amit csinálna a script, hogy az első mezőbe lévő dátumhoz hozzáadja a harmadik mezőben lévő számot.
A script:
f unction fiz_hat(){
str2=document.form1.szth.value;
str1=document.form1.szt.value;
var year=str1.substr(0,4);
var month=str1.substr(5,2);
var day=str1.substr(8,2);
if (str2>0)
{
if ((month=="09") || (month=="04") ||(month=="06") || (month=="11")) days=30;
if ((month=="02") && ((year=="2008") || (year=="2016") || (year=="2012") || (year=="2020"))) days=29;
if ((month=="02") && (!(year=="2008") || (year=="2016") || (year=="2012") || (year=="2020"))) days=28;
if ((month=="01") || (month=="03") || (month=="05") ||(month=="07") ||(month=="08") || (month=="10") ||(month=="12")) days=31;
day=parseInt(day) + parseInt(str2);
month=parseInt(month);
if (day > days)
{
month=parseInt(month) + 1;
day= parseInt(day)-parseInt(days);
year= parseInt(year);
if (day > days)
{
month=parseInt(month) + 1;
day= parseInt(day)-parseInt(days);
year= parseInt(year);
if (day > days)
{
month=parseInt(month) + 1;
day= parseInt(day)-parseInt(days);
year= parseInt(year);
}
}
}
if (month>12)
{
month=parseInt(month)-12;
year= parseInt(year)+1;
}
if (day<10) day="0"+day;
if (month<10) month="0"+month;
}
document.form1.szh.value='' + year + '-' + month + '-' + day;
}
Ez eddig jól működik. Viszont a 8. és 9. hóba a month értéke 0 lesz. És nembírok rájönni a hibára.
Hol rontottam el?
pch
- 1126 megtekintés
Hozzászólások
Helló! Csak futólag néztem bele, de így elsőre én se látom mi lehet a gond. Az input biztos jó?
Nem tudom mi a cél, de ha nem gyakorlásból vagy hasonló okból írod, akkor érdemes lehet esetleg egyszerűbb megoldás után nézni, pl nem megírni azt ami már rendelkezésedre áll :)
Nézz rá erre:
http://www.tek-tips.com/viewthread.cfm?qid=1216002&page=3
- A hozzászóláshoz be kell jelentkezni
Közbe ránéztem mégegyszer, és megvan hol a gond:
month=parseInt(month);
Itt romlik el, a "08" inputból 0 lesz, 0-nak értelmezi.
Csináld így inkább: month = 1 * month;
- A hozzászóláshoz be kell jelentkezni
nem romlik el, csak 8-as számrendszerbe számol, mivel nullával kezdődik, a js parseInt kicsi furán működik, ajánlott mindig megadni a számrendszert, tehát parseInt("08",10), így már 10-esben fog számolni/konvertálni.
http://www.w3schools.com/jsref/jsref_parseInt.asp
- A hozzászóláshoz be kell jelentkezni
Ezt akkora baromságnak tartottam mindig. Egyszerűen nem értem, miér a 8 lett az alapértelmezett?? Persze csak egyszer szívja meg az ember, aztán örök életére tudja :D:D
- A hozzászóláshoz be kell jelentkezni
Ez nem a js specialitása, hanem örökség a C-ből: ha valami a kontextusa alapján számliterál, és 0-val kezdődik, az oktális.
Azon persze lehet vitatkozni, hogy szám, amit a parseInt() paraméterként kap, vagy csak sztring, ami szám akar lenni, de a lényeg, hogy a nyolcizmus bármilyen bolond beszéd, van benne rendszer.
- A hozzászóláshoz be kell jelentkezni
Köszi, ezt nem tudtam.
- A hozzászóláshoz be kell jelentkezni
Jajj, ember, ne így!
var d=new Date();
d.setFullYear(é,h-1,n);
d.setDate(d.getTime()+hozzaadandó);
Annyi, hogy a timestamp millisec-es, azaz a szokásos UNIX timestamp ezerszerese, ennek megfelelően ha napot akarsz pl hozzáadni, akkor (hozzaadandó*24*60*60*1000)-el kell számolni.
A másik, amire figyelj, hogy a január a 0. hónap, nem az 1 (ezért van "h-1").
- A hozzászóláshoz be kell jelentkezni
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Thx!
A végleges script
str2=document.form1.szth.value;
str1=document.form1.szt.value;
var year=str1.substr(0,4);
var month=str1.substr(5,2);
var day=str1.substr(8,2);
var d = new Date(year,month,day);
d.setTime(d.getTime()+(str2*24*60*60*1000));
var newmonth=d.getMonth();
if (newmonth<10){newmonth="0"+newmonth;}
var newday=d.getDate();
if (newday<10){newday="0"+newday;}
var newyear=d.getFullYear();
document.form1.szh.value=(newyear+"-"+newmonth+"-"+newday);
pch
--
- A hozzászóláshoz be kell jelentkezni