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’);

}

Deja un comentario

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.