Error en código javascript, sumar fechas

Hola Experto, necesito su ayuda, la question es que tengo un script que suma mes a una fecha, el problema es que cuando ingreso fechas como dd/10/yyyy dd/11/yyyy y dd/12/yyyy
Y le mando a sumar 3 meses en adelante me hace mal el calculo, y me da una fecha incorrecta, pero con meses dd/01/yyyy al dd/09/yyyy si me hace bien el calculo, otra cosa que me percate es que si coloco de fecha 31/01/2011 y le mando a sumar un mes me da 31/02/2011 osea que le pone 31 a febrero, igual con los meses que no llegan a 31! Ayuda amigo! Este el script
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script language="JavaScript">
function cerosIzq(sVal, nPos){
var sRes = sVal;
for (var i = sVal.length; i < nPos; i++)
sRes = "0" + sRes;
return sRes;
}
function armaFecha(nDia, nMes, nAno){
var sRes = cerosIzq(String(nDia), 2);
sRes = sRes + "/" + cerosIzq(String(nMes), 2);
sRes = sRes + "/" + cerosIzq(String(nAno), 4);
return sRes;
}
function sumaMes(nDia, nMes, nAno, num_meses){
var tiempo_años=parseInt(num_meses/12);
var tiempo_meses=parseInt(num_meses%12);
var nuevo_mes=nMes+tiempo_meses;
var nuevo_año=nAno+tiempo_años;
if(nuevo_mes>12 && num_meses<=12){ nuevo_mes=nuevo_mes-12;nuevo_año++; }
if(nuevo_mes>12 ){ nuevo_mes=nuevo_mes-12; }
return armaFecha(nDia, nuevo_mes, nuevo_año);
}
function calcula(){
var sFc0 = document.frm.fecha0.value; // Se asume válida
var nSum = parseInt(document.frm.meses.value);
var vector_fecha=sFc0.split('/');
var nDia = parseInt(vector_fecha[0].substr(1, 1));
var nMes = parseInt(vector_fecha[1].substr(1, 1));
var nAno = parseInt(vector_fecha[2]);
sFc1 = sumaMes(nDia, nMes, nAno, nSum);
document.frm.fecha1.value = sFc1;
}
</script>
</head>
<body>
<form name="frm">
<table border="0">
<tr>
<td>
<table border="1">
<tr>
<td align="right">
Fecha inicial (dd/mm/aaaa)
</td>
<td>
<input type="text" name="fecha0" value="21/03/2002">
</td>
</tr>
<tr>
<td align="right">
Meses
</td>
<td>
<input type="text" name="meses" value="0">
</td>
</tr>
<tr>
<td align="right">
Fecha final (dd/mm/aaaa)
</td>
<td>
<input type="text" name="fecha1" readonly>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
<input type="button" value="Calcular" onClick="calcula()">
</td>
</tr>
</table>
</form>
</body>
</html>
Le agradezco su ayuda, es para un proyecto que tengo en php, y con este script me estaba ayudando hasta que me percate del error, y de verdad no se casi nada de script ya que me enseñaron solo php. Muchas Gracias de Antemano!

1 respuesta

Respuesta
1
Tendrás que hacer una función que revise el mes y sus días, es decir por ejemplo, dices de febrero, pues una función que calcule si el año es bisiesto o no, si febrero debería tener 28 o 29, es decir algo tipo.
function febrero(año)
{
if(bisiesto==1)
´{
return 29;
}
}
Tendrás que hacer una función a partir de esto
Es decir los años que sean divisibles por 4 serán bisiestos; aunque no serán bisiestos si son divisibles entre 100 (como los años 1700, 1800, 1900 y 2100) a no ser que sean divisibles por 400 (como los años 30000 ó 2400). En 400 años debe haber 97 años bisiestos, de esa manera el año del calendario gregoriano se mantiene muy parecido al año solar. Así el año gregoriano dura 365 días +1/4 -1/100 +1/400 = 365,2425 días (más que el año trópico, que dura 365,24219 días).
Para calcular los bisiestos
Y para lo de los meses supongo que sera porque al pasarle ints no reconozca por ejemplo 10+3 en los meses como 13, así que tendrás que hacer una función en plan,
if(nMes>12)
{
nMes = nMes - 12;
return nMes;
}
Espero que te sirva de ayuda, no se si es exactamente lo que me pides, para lo que sea seguimos en contacto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas