Tengo un problemilla con el siguiente código. Al poner una fecha en el campo FUR corregida, hace unos cálculos de fechas y rellena los campos de texto.
La primera ejecución es correcta, falla en al segunda.
Les agradezco su ayuda.
Código Javascript:
Ver original
function eliminarCerosIzq(cadena) { for(i=0; i<cadena.length; ) { if(cadena.charAt(i)=="0") cadena=cadena.substring(i+1, cadena.length); else break; } return cadena; } function FW(fecha) { alert('Entra en FW()'); month = fecha.getMonth(); date = fecha.getDate(); f1 = new Date(fecha.getFullYear(),0,1,0,0); dayf1 = f1.getDay(); if(dayf1 == 0) dayf1 = 7; f2 = new Date(fecha.getFullYear(),month,date,0,0); dayf2 = f2.getDay(); if(dayf2 == 0) dayf2 = 7; if(month == 0 && date == 1 && dayf2 > 4 || month == 0 && date == 2 && dayf2 > 5 || month == 0 && date == 3 && dayf2 == 7) { f1 = new Date(fecha.getFullYear()-1,0,1,0,0); f2 = new Date(fecha.getFullYear()-1,11,31,0,0); dayf1 = f1.getDay(); if(dayf1 == 0) day = 7; } if(month == 11 && date == 31 && dayf2 < 4 || month == 11 && date == 30 && dayf2 < 3 || month == 11 && date == 29 && dayf2 == 1) return(1); if(dayf1 <5) FW = parseInt(((Math.round(((f2-f1)/1000/60/60/24))+(dayf1-1))/7) + 1); else FW = parseInt(((Math.round(((f2-f1)/1000/60/60/24))+(dayf1-1))/7)); return FW; } function FW2(fecha) { alert('Entra en FW2()'); month = fecha.getMonth(); date = fecha.getDate(); f1 = new Date(fecha.getFullYear(),0,1,0,0); alert('f1 vale' + f1); dayf1 = f1.getDay(); if(dayf1 == 0) dayf1 = 7; f2 = new Date(fecha.getFullYear(),month,date,0,0); dayf2 = f2.getDay(); if(dayf2 == 0) dayf2 = 7; if(month == 0 && date == 1 && dayf2 > 4 || month == 0 && date == 2 && dayf2 > 5 || month == 0 && date == 3 && dayf2 == 7) { f1 = new Date(fecha.getFullYear()-1,0,1,0,0); f2 = new Date(fecha.getFullYear()-1,11,31,0,0); dayf1 = f1.getDay(); if(dayf1 == 0) day = 7; } if(month == 11 && date == 31 && dayf2 < 4 || month == 11 && date == 30 && dayf2 < 3 || month == 11 && date == 29 && dayf2 == 1) return(1); if(dayf1 <5) FW = parseInt(((Math.round(((f2-f1)/1000/60/60/24))+(dayf1-1))/7) + 1); else FW = parseInt(((Math.round(((f2-f1)/1000/60/60/24))+(dayf1-1))/7)); return FW; } function calculaFechas() { alert('Entra en calculaFechas'); //var valor = document.getElementById('E_HIST_FUR').value; //document.getElementById('E_HIST_FUR_CORRE').value=valor; var valor = document.getElementById('E_HIST_FUR_CORRE').value; fragmentoFecha = valor.split('/'); var d = eliminarCerosIzq(fragmentoFecha[0]); var m = fragmentoFecha[1]; var numMes = parseInt(m); numMes -= 1; var a = fragmentoFecha[2]; fecha = new Date(a, numMes, d); //año, mes,dia fecha2 = new Date(); //FW() y FW2() sin iguales, per si llamo 2 veces a la misma, peta var i = FW(fecha); // <-- FALLA AQUI, la segunda vez que pasa var j = FW2(fecha2); var dif_dias = fecha2.getDay() - fecha.getDay(); if(dif_dias < 0) dif_dias += 7; var dif_semanas = parseInt(i) - parseInt(j) if (dif_semanas < 0) { dif_semanas += 52; } var dd = fecha2.getDate() - fecha.getDate(); var restaMes = fecha2.getMonth() - fecha.getMonth(); if (restaMes==0 && dd>0 && dd < 7){ dif_semanas = 0; } alert('Asigna valor al campo EG'); document.getElementById('E_HIST_EG').value = dif_semanas + " semana/s y " + dif_dias + " día/s"; var mili=fecha.getTime(); fecha.setTime(parseInt(mili+24192000000)); //280 dias en milisegundos //corregir formato fecha var fd = fecha.getDate(); var fd_cad = '' + fd; if(fd_cad.length == 1) fd_cad = "0" + fd_cad; var fm = fecha.getMonth(); var fm_cad = '' + fm; if(fm_cad.length == 1) fm_cad = "0" + fm_cad; alert('Asigna valor al campo FPP'); document.getElementById('E_HIST_FPP').value = fd_cad + "/" + fm_cad + "/" + fecha.getYear(); } function esFecha(p_fecha) { return true; }
Código HTML:
Ver original
<body> <div class="formulario"> <table border=0 cellpadding=2 cellspacing=0 align=center> <form name='F1' method=post> <tr> <input name='E_HIST_EG' value='' readonly="readonly" size='40' maxlength=80 title='' tabindex=50> </td> <INPUT NAME='E_HIST_FPP' VALUE='' readonly="readonly" SIZE='40' maxlength=80 TITLE='' tabindex=60 onfocus='select()' onchange='if(esFecha("E_HIST_FPP")){return true;} else return false;'> </td> </tr> <tr> <INPUT NAME='E_HIST_FUR_CORRE' onPropertyChange='calculaFechas()' VALUE='' SIZE='10' maxlength=80 TITLE='' tabindex=70 onfocus='select()' onchange='if(esFecha("E_HIST_FUR_CORRE")){return true;} else return false;'> </td> </tr> </form> </table> </div> </body>