
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 Validateif(!/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
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

y su recibieras la fecha y/m/d
ResponderEliminarHola,
ResponderEliminarestas 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.
has usado <> y debería ser > no es así?
ResponderEliminarDigo 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
@alexrod Muchas gracias por la rectificación, ahora mismo lo modifico! :)
ResponderEliminarAcabo de ver un problemilla en Chrome que no le va las fechas en español.
ResponderEliminarAsí 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;
}
}
}
Muchas gracias por tu aportación @alexrod
ResponderEliminarUn saludo
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.
ResponderEliminarY 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
La informacion de tu blog es muy interesante el tema que no se ha tratdo mucho y es dificil de encontrar!!!
ResponderEliminar