Vi sottopongo questo script.

Da problemi con le date. in particolare quando ricadono i giorni successivi al 29 di ogni mese.
esempio dal 1.1.1970 al 31.12.1970 conta 335 giorni
Sviluppo del calcolo:
Capitale 0 x Tasso Interesse 5.00% x
(dal 1.1.1970 al 31.12.1970=335 /365)= 0
i giorni avrebbero dovuto essere 365

il problema si pone anche alla data di partenza:

Sviluppo del calcolo:
Capitale 0 x Tasso Interesse 5.00% x
(dal 30.1.1970 al 1.1.1971=365/365)= 0
i giorni avrebbero dovuto essere 395.





<!--

function imposta_oggi()
{
// oggi
oggi = date();
document.form_interessi.aa.value = oggi.getYear();
document.form_interessi.mm.value = oggi.getMonth()+1;
document.form_interessi.gg.value = oggi.getDate();

document.form_interessi.fa.value = oggi.getYear();
document.form_interessi.fm.value = oggi.getMonth()+1;
document.form_interessi.fg.value = oggi.getDate();
delete oggi;
}
function calc_interessi()
{
var int_perc =[0.05,0.10,0.05,0.025,0.035,0.03,0.025,0.03];
var date =[19430101,19901216,19970101,19990101,20010101,20020 101,20040101,20080101];
var incr = 0;
tot_inte = 0;
interessi = new Number();
interessi = 0;
capitale = new Number();
capitale = parseInt(document.form_interessi.capitale.value);
arrivo = new Date();
partenza = new Date();
oggi = new Date();
dataA = 20080101;
dataP = 20080101;
//data di partenza
ggp = parseInt(document.form_interessi.gg.value);
mmp = parseInt(document.form_interessi.mm.value);
aap = parseInt(document.form_interessi.aa.value);
dataP = (aap* 10000) + (mmp * 100) + ggp;
//data di arrivo
gga = parseInt(document.form_interessi.fg.value);
mma = parseInt(document.form_interessi.fm.value);
aaa = parseInt(document.form_interessi.fa.value);
dataA = (aaa* 10000) + (mma * 100) + gga;
// oggi
ggo = 0;
mmo = 0;
aao = 0;
dataO = 0;


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


if(aap > aaa || dataP < 19700101)
{
alert("Date incongruenti o precedenti al 1 gennaio 1943.\n \n Si prega di correggere e riprovare, grazie.");
document.form_interessi.gg.focus();
return (false);
}
document.form_interessi.risultato.value = "Sviluppo del calcolo: \n\n";




////////////////////////////////////////////////////int_perc[0]/////////////////////////////////////////////////////////////



if(dataP <= 19901215)
{
incr = 0;
if(dataA >= 19901215)
{
ggo = 15;
mmo = 12;
aao = 1990;
arrivo.setDate(ggo); ///////////////////////////////////// attenzione nella prima tranche di calcolo è ggo poi è gga
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setMonth(mmo-1);
arrivo.setFullYear(aao);

partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[0] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse " + "5.00% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 15;
mmp = 12;
aap = 1990;
dataP = 19901215;
}




/////////////////////////////////////////////////////int_perc[1]//////////////////////////////////////////////////////////////////



if(dataP <= 19961231)
{
incr = 0;
if(dataA >= 19961231)
{
ggo = 31;
mmo = 12;
aao = 1996;
arrivo.setDate(30);
incr = 1;
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setMonth(mmo-1);
arrivo.setFullYear(aao);

partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[1] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse " + "10.00% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 1996;
dataP = 19961231;
}




//////////////////////////////////////////////////////int_perc[2]/////////////////////////////////////////////////////////////////////

if(dataP <= 19981231)
{
incr = 0;
if(dataA >= 19981231)
{
ggo = 31;
mmo = 12;
aao = 1998;
arrivo.setDate(30);
incr = 1;
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setMonth(mmo-1);
arrivo.setFullYear(aao);

partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[2] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse " + "5.00% x \n(dal "+ ggp+"."+ mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 1998;
dataP = 19981231;
}



//////////////////////////////////////////////////////////int_perc[3]/////////////////////////////////////////////////////////////

if(dataP <= 20001231)
{
partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);
incr = 0;
if(dataA >= 20001231)
{
ggo = 31;
mmo = 12;
aao = 2000;
incr = 1;
arrivo.setDate(30);
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setFullYear(aao);arrivo.setMonth(mmo-1);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[3] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse 2.50% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 2000;
dataP = 20001231;
}




/////////////////////////////////////////////////////int_perc[4]//////////////////////////////////////////////////////////////////




if(dataP <= 20011231)
{
partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);
incr = 0;
if(dataA >= 20011231)
{
ggo = 31;
mmo = 12;
aao = 2001;
incr = 1;
arrivo.setDate(30);
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setFullYear(aao);arrivo.setMonth(mmo-1);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[4] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse 3.50% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 2001;
dataP = 20011231;
}




////////////////////////////////////////////////////////int_perc[5]///////////////////////////////////////////////////////////////


if(dataP <= 20031231)
{
partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);
incr = 0;
if(dataA >= 20031231)
{
ggo = 31;
mmo = 12;
aao = 2003;
incr = 1;
arrivo.setDate(30);
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setFullYear(aao);arrivo.setMonth(mmo-1);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[5] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse 3.00% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 2003;
dataP = 20031231;
}



//////////////////////////////////////////////////////int_perc[6]/////////////////////////////////////////////////////////////////




if(dataP <= 20071231)
{
partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);
incr = 0;
if(dataA >= 20071231)
{
ggo = 31;
mmo = 12;
aao = 2007;
incr = 1;
arrivo.setDate(30);
}
else
{
if(mma == 12 && gga == 31)
{
ggo = gga;
arrivo.setDate(30);
incr = 1;
}
else
{
ggo = gga;
arrivo.setDate(gga);
}
mmo = mma;
aao = aaa;
}

arrivo.setFullYear(aao);arrivo.setMonth(mmo-1);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[6] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse 2.50% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ ggo+"." +mmo +"." +aao +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}
ggp = 31;
mmp = 12;
aap = 2007;
dataP = 20071231;
}





////////////////////////////////////////////////////int_perc[7]///////////////////////////////////////////////////////////////////




if(dataA >= 20071231)
{
partenza.setDate(ggp);
partenza.setMonth(mmp-1);
partenza.setFullYear(aap);

if(mma == 12 && gga == 31)
{
arrivo.setDate(30);
incr = 1;
}
else
{
arrivo.setDate(gga);
incr = 0;
}
arrivo.setMonth(mma-1);
arrivo.setFullYear(aaa);

diffgiorni = arrivo.getTime()- partenza.getTime();
diffgiorni = Math.floor(diffgiorni /(1000 * 60 * 60 * 24));
diffgiorni += incr;
if(diffgiorni > 0)
{
interessi = Math.round(capitale * int_perc[7] * (diffgiorni/365));
tot_inte += interessi;
document.form_interessi.risultato.value += "Capitale "+ Mettipunti(capitale) + " x Tasso Interesse 3.00% x \n(dal "+ ggp+"." +mmp +"." +aap +" al "+ gga+"." +mma +"." +aaa +"=" + diffgiorni + "/365)= " + Mettipunti(interessi)+"\n\n";
}

}
document.form_interessi.tot_inte.value = Mettipunti(tot_inte);
document.form_interessi.cap_int.value = Mettipunti(capitale+tot_inte);
document.form_interessi.capitale.value = Mettipunti(capitale);
delete interessi;
delete capitale;
delete oggi;
delete arrivo;
delete partenza;
}





function Mettipunti(valore)
{
//Metti i punti delle migliaia
var puntPtr = "";
var comodo = "";
var i = 0;
var inc = 0;
var mod = 0;

comodo= valore.toString();

if(comodo.length > 3)
{
mod = comodo.length % 3;
if(mod == 0)
{
inc = 3;
}
else
{
inc = mod;
}
i = comodo.length / 3;
puntPtr = comodo.substring(0,inc);
puntPtr = puntPtr + "." + comodo.substring(inc,inc+3);
mod = inc + 3;
if( i > 2)
{
puntPtr = puntPtr + "." + comodo.substring(mod,mod+3);
}
mod = mod + 3;
if( i > 3)
{
puntPtr = puntPtr + "." + comodo.substring(mod,mod+3);
}
return puntPtr;
}
else return valore;
}
// end -->