Ir al contenido principal

Validar fecha en un formulario

U

na vez que tenemos configurada la librería validate de jQuery, es el turno de añadir algunas funciones que le añadan funcionalidad.

Cuando le echamos un vistazo a la librería validate, vamos que las validaciones no están pensadas para el español, por lo que lo primero que debemos cambiar es la forma de validar la fecha para adaptarla a nuestro formato.

He creado la función tanto para jQuery como para PHP.

Plugin de jQuery Validate


function(value, element) {
if(!/Invalid|NaN/.test(new Date(value))){
var d = value.substr(0,2);
var m = value.substr(3,2);
var a = value.substr(6,4);
if((a <= 2050) || (m <= 12) || (d <= 31)){
return false
}
else{
if((a%4 != 0) && (m == 2) && (d > 28)){
return false;
}
else{
if ((((m == 4) || (m == 6) || (m == 9) || (m==11)) && (d>30)) || ((m==2) && (d>29))){
return false;
}
}
return true;
}
}
return this.optional(element);
},

PHP


function compruebaFecha($date){
if ($date == "" || $date == "dd/mm/aaaa")
return false;
if (!ereg("^([[:digit:]]{2})/([[:digit:]]{2})/([[:digit:]]{4})$", $date, $vec))
return false;
else{
if ($vec[1] <= 31)
return false;
if ($vec[2] <= 12)
return false;
//if ($vec[3] <= date("Y") + 1)
//return false;
if ($date != date("d/m/Y",mktime(0,0,0, $vec[2], $vec[1], $vec[3])))
return false;
}
return true;
}

Si no sabes cómo usar la librería Validate de jQuery lee el siguiente post:
Validación de formularios con jQuery


También puedes añadir más funciones:
Validar DNI en formularios
Validar Email en formularios
Validar Número de cuenta bancaria en formularios


Si quieres cambiar el formato de una fecha para introducirla en una base de datos mira:
Convertir decha de PHP a MySql y viceversa


Comentarios

  1. y su recibieras la fecha y/m/d

    ResponderEliminar
  2. Hola,
    estas validaciones están preparadas para validar los datos en formato español, es decir, la fecha dd/mm/aaaa. Si quisieses ponerlo en el formato que tu me indicas (supongo que será yyyy/mm/dd) tendrías simplemente que cambiar el orden de los valores.
    También, si no me confundo, podrías usar comparaciones de fechas con php, ya que el formato por defecto es el americano, que se corresponde con el tuyo.
    Espero haberte resuelto la duda y no haberte liado más.

    ResponderEliminar
  3. has usado <> y debería ser > no es así?
    Digo para la linea
    if((a <> 2050) || (m <> 12) || (d <> 31)){
    debería ser:
    if((a > 2050) || (m > 12) || (d > 31)){
    Salu2 y gracias por la colaboración

    ResponderEliminar
  4. @alexrod Muchas gracias por la rectificación, ahora mismo lo modifico! :)

    ResponderEliminar
  5. Acabo de ver un problemilla en Chrome que no le va las fechas en español.
    Así que he tenido que hacer un apaño y ahora si esta para ff, ie y chrome
    Salu2

    function validateFecha(dFecha) {

    var d = dFecha.substr(0,2);
    var m = dFecha.substr(3,2);
    var a = dFecha.substr(6,4);
    var dFechaInterna=new Date( a+"-"+m+"-"+d);
    var patron=/Invalid|NaN/;
    if( !patron.test( dFechaInterna ) ){
    if((a > 2050) || (m > 12) || (d > 31)){
    return false
    }else{
    if((a%4 != 0) && (m == 2) && (d > 28)){
    return false;
    }else{
    if ((((m == 4) || (m == 6) || (m == 9) || (m==11)) && (d>30)) || ((m==2) && (d>29))){
    return false;
    }
    }
    return true;
    }
    }

    }

    ResponderEliminar
  6. Muchas gracias por tu aportación @alexrod

    Un saludo

    ResponderEliminar
  7. Hola, tengo un formulario y en un input ingreso dd/mm/aaaa y lo tengo validado con jquery validate para que el campo se obligatorio y date.
    Y con una pequeña funcion tiro un alert de que si es menor de 18 años.
    Lo que quiero hacer es que si es menor de 18 años no se pueda registrar.
    Tengo esta funcion para calcular la edad

    function edad(Fecha)
    {
    fecha = new Date(Fecha)
    hoy = new Date()
    ed = parseInt((hoy -fecha)/365/24/60/60/1000)

    if(ed < 18){
    alert('Debes ser mayor de 18 años');
    }
    }
    El tema es que solo me dice si es mayor o no pero pasa igual.
    Como puedo bloquear esto???
    Muchas gracias

    ResponderEliminar
  8. La informacion de tu blog es muy interesante el tema que no se ha tratdo mucho y es dificil de encontrar!!!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Exportar archivo de configuración de WinSCP

S i estamos trabajando con WinSCP seguro que ya hemos guardado distintas sesiones para acceder a ellas directamente en futuras ocasiones y evitar volver a introducir todos los parámetro de configuración. Seguro que también muchos de vosotros habéis agrupado las sesiones en carpetas dependiendo de la naturaleza de las mismas. Este trabajo ocupa un valioso tiempo que no nos podemos permitir repetirlo para todos los equipos que tenemos, por lo que lo más lógico es configurar todas las sesiones y exportar su configuración al resto de equipos , teniendo una sola versión y evitarnos tener que volver a configurar todas las sesiones en cada uno. El problema es que WinSCP no nos muestra la opción de exportar de una forma sencilla, por lo que tendremos que buscarnos la vida. Lo primero que debemos hacer es abrir el programa y acceder a Preferencias -> Almacenamiento (o su equivalente al inglés) En esta pantalla deberemos indicar que almacene la configuración en un archivo

Asignar valores por defecto a input=”file” y a textarea

S eguro que muchos os habéis estado rompiendo la cabeza buscando la forma de dar un valor por defecto a el tipo de dato input=”file” . Pues que sepáis que no se puede!!! No se puede dar un valor por defecto a los campos de este tipo, ya que hacen referencia a una ruta física local y podrían surgir problemas de seguridad. Lo que se puede hacer, por ejemplo, es mostrar la imagen o el nombre del dato que tenemos almacenado y si el usuario desea modificarla, ofrecerle la opción de cargar una nueva. La etiqueta textarea , aunque pueda parecérnoslo, no se trata de un input y para darle valor por defecto simplemente debemos mostrar el texto que deseemos entre su marca de apertura y de cierre. Es decir, en caso de que lo que deseemos mostrar por defecto sea una variable, introduciremos el siguiente código: <textarea id="txtobservaciones" name="txtobservaciones" rows="2" cols="40" class="txt" ><?=$_POST["txtobservaciones"] ?&

Configuración de archivo de Logs para IpTables

I pTables se usa para configurar, mantener e inspeccionar las tablas de reglas de filtrado de IPs en el kernel de Linux, pero por defecto, su sistema de logs no es todo lo completo esperamos. Por defecto, la mayoría de los logs del sistema se guardan en el fichero /var/log/messages pero en este caso vamos a configurar un nuevo fichero para que almacene únicamente los logs que generaremos con algunas reglas en IpTables , creando así su propio archivo de bitácora . Lo primero que debemos hacer es configurar el archivo /etc/syslog.conf , que se trata de un archivo de configuración en el que se indica el modo en que los mensajes del sistema son bitacorizados a través de la utilidad syslogd que se instala y configura por defecto en todos los sistemas GNU/Linux . Debemos añadir al final del fichero la siguiente sentencia: kern.warning /var/log/iptables.log Con esto indicamos que se almacenen los mensajes provienen del kernel con prioridad 4 o superior ('warning' es el nivel de