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;
	}
}



Josep Viciana

Programador de 28 años con una década de experiencia como programador. interesado en el diseño, ilustración y nuevas tecnologías. Dedicado desde siempre a la programación Web y desde hace algunos años también a la móvil.

17 comentarios

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 un comentario

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