Foros del Web » Programando para Internet » Javascript »

Textbox con mascara de formato fecha

Estas en el tema de Textbox con mascara de formato fecha en el foro de Javascript en Foros del Web. Hola, tengo un formulario con un par de textbox donde los usuarios tienen que meter una fecha y quisiera que al ver el formulario estos ...
  #1 (permalink)  
Antiguo 11/11/2009, 09:59
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Textbox con mascara de formato fecha

Hola, tengo un formulario con un par de textbox donde los usuarios tienen que meter una fecha y quisiera que al ver el formulario estos dos textbox apareciesen ya con las barras puestas y que al rellenarlo se aplicase el formato de forma automática, es decir, al entrar a la página verían esto:

Código PHP:
  <input name="textfield" type="text" value="  /  /    " size="10" maxlength="10" /> 
Y a medida que ellos escriban la fecha las barras permanezcan en su sitio sin desplazarse, por lo que al final les quedaría algo con el formato adecuado, por ejemplo 23/11/2009

Muchas gracias, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 11/11/2009, 13:50
 
Fecha de Ingreso: julio-2009
Mensajes: 42
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Textbox con mascara de formato fecha

te pao un codigo algo simple que seguramente podra ilustrarte en el modo q debes implementar lo que buscas:

document.onkeyup=function(evt)
{
evt = (evt) ? evt : (window.event);
charCode = parseInt(evt.keyCode);

dd=/^([1-9]|[12][0-9]|3[01])$/
mm=/^([1-9]|[12][0-9]|3[01])\/([1-9]|1[012])$/
aa=/^([1-9]|[12][0-9]|3[01])\/([1-9]|1[012])\/(19|20)\d\d$/

txt=document.getElementById("_fecha");
val=txt.value;
if(!aa.test(val))
{
if(dd.test(val) || mm.test(val))
{
val+="/";
txt.value=val;
txt.style.background='#FFFFFF';
return;
}else
{
txt.style.background='#FF0000';
return;
}
}

txt.style.background='#00FF00';
}


<input type="text" id="_fecha"/>
  #3 (permalink)  
Antiguo 12/11/2009, 05:31
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Textbox con mascara de formato fecha

Lo he probado, pero algo falla, por ejemplo si pongo como fecha 1/1/2009 va bien, sin embargo, no me deja poner 01/01/2009, que habría que poner para que permita este formato?? Por lo demás perfecto, salvo que quieren que cuando esté en blanco ya aparezcan las barras, es decir, el value del textbox al entrar en la página sería / / , hay forma de hacerlo??
__________________
Vayamos por Partes :: Jack el Destripador
  #4 (permalink)  
Antiguo 12/11/2009, 06:33
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Textbox con mascara de formato fecha

Hola

Prueba con esto

Código javascript:
Ver original
  1. <html>
  2. </head>
  3. <script type="text/javascript">
  4. var patron = new Array(4,2,2)
  5. function Validar(elem,separador,pat,numerico) {
  6.     if(elem.valoranterior != elem.value) {
  7. valor = elem.value;
  8. largo = valor.length;
  9. valor = valor.split(separador);
  10. valor2 = "";
  11.  
  12.     for(i=0; i<valor.length; i++) {
  13.         valor2 += valor[i];
  14.     }
  15.  
  16.     if(numerico){
  17.         for(j=0; j<valor2.length; j++){
  18.             if(isNaN(valor2.charAt(j))){
  19.                 letra = new RegExp(valor2.charAt(j),"g");
  20.                 valor2 = valor2.replace(letra,"");
  21.             }
  22.         }
  23.     }
  24.  
  25. valor = "";
  26. valor3 = new Array();
  27.     for(n=0; n<pat.length; n++) {
  28.         valor3[n] = valor2.substring(0,pat[n]);
  29.         valor2 = valor2.substr(pat[n]);
  30.     }
  31.  
  32.     for(q=0; q<valor3.length; q++) {
  33.         if(q == 0) {
  34.             valor = valor3[q];
  35.         }else{
  36.             if(valor3[q] != "") {
  37.                 if (valor3[1] > 12 ) {
  38.                     valor = valor3[0];
  39.                 } else if (valor3[2] > 31) {
  40.                     valor = valor3[0] + separador + valor3[1];
  41.                 }else{
  42.                     valor += separador + valor3[q];
  43.                 }
  44.  
  45.             }
  46.         }
  47.     }
  48.  
  49.     elem.value = valor;
  50.     elem.valoranterior = valor;
  51.     }
  52. }
  53. </script>
  54. </head>
  55. <body>
  56. <form>
  57. <h1>Valida una fecha yyyy-mm-dd</h1>
  58. <input type="text" name="fecha" id= "fecha" onkeyup="Validar(this,'-',patron,true)" maxlength="10" />
  59. </form>
  60. </body>
  61. </html>

Aunque tal vez, te sea mas conveniente a tus necesidades este otro

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 12/11/2009, 08:41
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 5 meses
Puntos: 8
Respuesta: Textbox con mascara de formato fecha

He probado el del link que está muy bien, pero no consigo que funcione :( y eso que he cogido uno de los ejemplos tal cual... bueno, de todas formas tu código también va bien, lo único es que necesitaría que el formato fuese dd/mm/yyyy como debería modificarlo, porque no lo tengo muy claro, la verdad.
Muchas gracias, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 13/11/2009, 08:15
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Textbox con mascara de formato fecha

Hola

Prueba así

Código javascript:
Ver original
  1. var patron = new Array(2,2,4)
  2. function Validar(elem,separador,pat,numerico) {
  3.     if(elem.valoranterior != elem.value) {
  4. valor = elem.value;
  5. largo = valor.length;
  6. valor = valor.split(separador);
  7. valor2 = "";
  8.  
  9.     for(i=0; i<valor.length; i++) {
  10.         valor2 += valor[i];
  11.     }
  12.  
  13.     if(numerico){
  14.         for(j=0; j<valor2.length; j++){
  15.             if(isNaN(valor2.charAt(j))){
  16.                 letra = new RegExp(valor2.charAt(j),"g");
  17.                 valor2 = valor2.replace(letra,"");
  18.             }
  19.         }
  20.     }
  21.  
  22. valor = "";
  23. valor3 = new Array();
  24.     for(n=0; n<pat.length; n++) {
  25.         valor3[n] = valor2.substring(0,pat[n]);
  26.         valor2 = valor2.substr(pat[n]);
  27.     }
  28.  
  29.     for(q=0; q<valor3.length; q++) {
  30.         if(q == 0) {
  31.             valor = valor3[q];
  32.         }else{
  33.             if(valor3[q] != "") {
  34.                 if (valor3[1] > 12 ) {
  35.                     valor = valor3[2];
  36.                 } else if (valor3[0] > 31) {
  37.                     valor = valor3[1] + separador + valor3[2];
  38.                 }else{
  39.                     valor += separador + valor3[q];
  40.                 }
  41.  
  42.             }
  43.         }
  44.     }
  45.  
  46.     elem.value = valor;
  47.     elem.valoranterior = valor;
  48.     }
  49. }

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:30.