Validar fecha en formato DD/MM/AAAA con Javascript

No es mío, es de Smartwebby y yo sólo he hecho una adaptación. En su web se pueden encontrar la versión original y la versión en formato MM/DD/AAAA.

Uso:

validaFechaDDMMAAAA("14/11/1988"); // true
validaFechaDDMMAAAA("32/11/1988"); // false

Función:

function validaFechaDDMMAAAA(fecha){
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
	function isInteger(s){
		var i;
		for (i = 0; i < s.length; i++){
			var c = s.charAt(i);
			if (((c < "0") || (c > "9"))) return false;
		}
		return true;
	}
	function stripCharsInBag(s, bag){
		var i;
		var returnString = "";
		for (i = 0; i < s.length; i++){
			var c = s.charAt(i);
			if (bag.indexOf(c) == -1) returnString += c;
		}
		return returnString;
	}
	function daysInFebruary (year){
		return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}
	function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
		}
		return this
	}
	function isDate(dtStr){
		var daysInMonth = DaysArray(12)
		var pos1=dtStr.indexOf(dtCh)
		var pos2=dtStr.indexOf(dtCh,pos1+1)
		var strDay=dtStr.substring(0,pos1)
		var strMonth=dtStr.substring(pos1+1,pos2)
		var strYear=dtStr.substring(pos2+1)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) {
			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
		}
		month=parseInt(strMonth)
		day=parseInt(strDay)
		year=parseInt(strYr)
		if (pos1==-1 || pos2==-1){
			return false
		}
		if (strMonth.length<1 || month<1 || month>12){
			return false
		}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
			return false
		}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			return false
		}
		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
			return false
		}
		return true
	}
	if(isDate(fecha)){
		return true;
	}else{
		return false;
	}
}

Comentarios (17)

pfff no te la quiero bajar pero no es mas simple esta funcion:

function validaFechaDDMMAAAA(fecha)
{
return /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}$/.test(fecha);
}

te aconsejo que investigues sobre ‘expresiones regulares’..

Nahuel,
bastante inutil tu comentario,
una expresion regular solo puede validar el formato de entrada pero no el contenido de la fecha,
tu funciçon no es capaz de validar 31-02-2013

yo te aconsejo a ti, no escribir bobadas sin antes pensarlas mejor,

pense que tu función era solo para validar el formato… de todas formas se puede hacer lo siguiente..
function checkdate (m, d, y) {
return m > 0 && m 0 && y 0 && d <= (new Date(y, m, 0)).getDate();
}
solo faltaría adaptarlo para separar el string pero el concepto ahí lo tenes..

Aporto con algo, primero chequeo el formato y luego si la fecha es valida:
// fecha=dd/mm/aaaa
var patt= new RegExp(‘(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/[0-9]{4}’,’g’);
fec = new Date(fecha.substring(6,10),fecha.substring(3,5)-1,fecha.substring(0,2));
if (patt.test(fecha) && (fec.getMonth() == fecha.substring(3,5)-1 || fec.getDate() ==fecha.substring(0,2))){

alert(‘La fecha es correcta’);

}

no seria mejor preguntar de esta forma?

if($(«#Retorno»).val() != Date){
$(«#Retorno»).val(dt.getDate()+»/»+dt.getMonth()+»/»+dt.getFullYear());
}

Disculpen tengo un problema parecido que quisiera que me ayudaran a resolver.

quisiera validar un enlace por medio de fecha ejemplo

la matricula comienza en 15 de enero del 2015

mientras esa fecha no se haga festiva el enlace permanece cerrado pero cuando la fecha llega entonces el enlace queda abierto

ayuda cual seria el código en javascript

que tal esta forma
function ValidaFecha(sFecha) {

var sTmp = String(sFecha);
arrfch = sTmp.split(«/»);
var valor = new Date(arrfch[2], arrfch[1], arrfch[0]);

return !isNaN(valor);

}

Que tal braffy!
Tu codigo tiene un error, cualquier fecha es correcta, me explico, si yo introduzco 30 de febrero de cualquier año, dice que es correcto, esto pasa porqué, la clase Date siempre calcula una fecha valida, así que cuando intoduzcas, 31 de febrero de 1995, el resultado es 3 de marzo de 1995.

Un poco de angular y expresiones regulares para validarlo, diganme que opinan?

(function(){
	angular.module('ValidationCorrectlyDate',[])
		.factory('CorrectlyDateFactory',function(){
			function validaFechaDDMMAAAA(fecha){
				var expReg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;
				return expReg.test(fecha);
			}
			return {
				validaFechaDDMMAAAA :validaFechaDDMMAAAA
			}
		});
})();

tengo un formulario que contiene fecha en el formato y que visualiza con date(‘m/d/Y’), pero quiero validar y quiero que solo se registren fechas por ejemplo del año 1960 a 1985
como puedo hacer

tengo una pregunta quiero validar la fecha para que el usuario no registre de su asistencia anticipado (suponiendo de mañana) y solo registre del día o del día anterior en caso que necesite regularizar sus registros.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.