// // Advanced-Fecha 1.0 SADIEL.SA // // fecha de creación: 29/6/2001 última revisión: 16/8/2001 // // Miguel A. Moreno Martín // // Descripción: Librería que implementa en javascript la creación de campos de fecha // Funciona en iexplore y NS // // Uso: en aquel lugar que necesitemos el campo de fecha, pondremos una llamada a la función // 'genera_campo_fecha' // Interfaz: // genera_campo_fecha(formulario, campo, fecha, primero, numanyos, permitenulo) // // donde: formulario - nombre del formulario donde irá el campo de fecha // campo - nombre con que queremos recoger el campo fecha en el formulario // fecha - fecha de inicialización en formato: dd/mm/yyyy" // primero - primer año que queremos que aparezca en la lista desplegable // numanyos - número de años que queremos que aparezcan en la lista desplegable // permitenulo - (opcional) a true si queremos que la fecha pueda ser nula // // Requisitos: // // - Los podremos declarar más de un campo fecha con el mismo nombre, no funcionarán // - Los nombres de campo que sean el de un campo fecha con el sufijo "_dia" "_mes" o "_anyo" no deben emplearse pues // son utilizados en esta impplemantación y fallaría. // // NOTA en este documento la salida del campo será en foto. fecha MySQL, yyyy-MM-dd // // Modificación: José Antonio González Seco (JAGS) Fecha: 26/02/2003 // -- Añadida la posiblidad de cambiar los nombres de los meses: parámetro opcional 'nombresDeMeses' // -- Añadida la posiblidad de configurar un código adicional a ejecutar al cambiar la selección de cualquiera de las 3 casillas: parámetro opcional 'codigoCambio' // *************************************************************************************** var nombremeses= new Array(); nombremeses[0]="Ninguna"; nombremeses[1]="Enero"; nombremeses[2]="Febrero"; nombremeses[3]="Marzo"; nombremeses[4]="Abril"; nombremeses[5]="Mayo"; nombremeses[6]="Junio"; nombremeses[7]="Julio"; nombremeses[8]="Agosto"; nombremeses[9]="Septiembre"; nombremeses[10]="Octubre"; nombremeses[11]="Noviembre"; nombremeses[12]="Diciembre"; var diasmes= new Array(); diasmes[0]=31; diasmes[1]=31; diasmes[2]=28; diasmes[3]=31; diasmes[4]=30; diasmes[5]=31; diasmes[6]=30; diasmes[7]=31; diasmes[8]=31; diasmes[9]=30; diasmes[10]=31; diasmes[11]=30; diasmes[12]=31; function diasen(mes, anyo) { mes = parseInt(mes); anyo=parseInt(anyo); if (mes!=2) return diasmes[mes]; else return (((anyo%4==0&&!anyo%100==0)||anyo%400==0)?29:28) } function escribemeses(_formulario, _campo, permiteninguna, codigoCambio) { window.document.write(""); } function escribeanyos(_formulario, _campo, primero,numanyos, permiteninguna, codigoCambio) { window.document.write(""); } function escribedias(_formulario, _campo, mes, anyo, permiteninguna, codigoCambio) { cadena = ""); } function controlafecha(formul, cam, campo, permiteninguna) { selectdia=eval("window.document." + formul + "." + cam + "_dia"); selectmes=eval("window.document." + formul + "." + cam + "_mes"); selectanyo=eval("window.document." + formul + "." + cam + "_anyo"); campohidden= eval("window.document." + formul + "." + cam); // Comprobamos si el cambio requiere reajuste de los combos dia = selectdia.options[selectdia.selectedIndex].value; mes = selectmes.options[selectmes.selectedIndex].value; anyo = selectanyo.options[selectanyo.selectedIndex].value; // alert(dia + "-" + mes + "-" + anyo) if (dia=="-1" || mes=="-1" || anyo=="-1") { switch (campo) { case "dia": if (dia=="-1") si=false; else si=true; break; case "mes": if(mes=="-1") si=false; else si=true; break; case "anyo": if (anyo=="-1") si=false; else si=true; break; default: alert("que haces aqui?"); break; } if (!si) { dia = "-1" ; mes = "-1"; anyo = "-1" ; campohidden.value = ""; selectdia.options[0].selected=true; selectmes.options[0].selected=true; selectanyo.options[0].selected=true; } else { if(selectdia.options[0].selected) selectdia.options[1].selected=true; if(selectmes.options[0].selected) selectmes.options[1].selected=true; if(selectanyo.options[0].selected) selectanyo.options[1].selected=true; dia = selectdia.options[selectdia.selectedIndex].value; mes = selectmes.options[selectmes.selectedIndex].value; anyo = selectanyo.options[selectanyo.selectedIndex].value; /* controlafecha(formul, cam, permiteninguna) */ } } else { // si el número de dias para el mes es correcto no hay problema nuevonumdias = diasen(mes,anyo); if(permiteninguna){ nuevonumdias+=1; } antiguonumdias = selectdia.length; if(antiguonumdias < nuevonumdias) // reajuste { selectdia.length = nuevonumdias; var i; if (permiteninguna==true) i=2; else i=1; for( i; i<= nuevonumdias; i++) { if (permiteninguna==true) value=i-1; else value=i; selectdia.options[i-1].text=value; selectdia.options[i-1].value=value; } } else if (antiguonumdias > nuevonumdias){ selectdia.length = nuevonumdias; if(permiteninguna==true) dia++; if (dia > nuevonumdias) selectdia.options[selectdia.length - 1].selected = true ; } else { // no necesitamos cambiar nada } // lo único que puede haber cambiado desde que miramos los select fue el dia... dia = selectdia.options[selectdia.selectedIndex].value; // Formato MySql // aquí fallaba //campohidden.value = dia + "/" + mes + "/" + anyo; } if(dia!=-1) campohidden.value = dia + "/" + mes + "/" + anyo; } function escribehidden(_campo,_value) { window.document.write(""); } function genera_campo_fecha(formulario, campo, fecha, primero, numanyos, permiteninguna, nombresDeMeses, codigoCambio) { // JAGS - I //nombresDeMeses es un parámetro opcional, de establecerlo, su valor es un array con los nombres que se dará a los meses. Por defecto, toman sus nombres clásicos en español if (nombresDeMeses != null) { for (var i = 0; i