Validar una fecha con ASP

  • Por
Función para comprobar si una fecha es correcta, es decir, si es un día mes y año son correctos, en páginas programadas con ASP.
Veamos una función creada con Active Server Pages para hacer una comprobación de fechas. La función recibe un día, un mes y un año y comprueba que estos sean numéricos y que la fecha creada entre todos es correcta y posible en el calendario.

La función recibe los datos de día mes y año como string, tal como podrían llegarnos a través de un formulario o como parámetro en una URL. No obstante, dado que ASP es un lenguaje poco tipado, aunque pasemos valores numéricos a la función seguirá dando resultados correctos.

Como resultado la función devolverá un valor verdadero o falso, dependiendo si la fecha es correcta o incorrecta.

El código de la función es el siguiente:

'valido una fecha
'espero recibir tres strings con el dia, el mes y el año

function validarFecha(dia,mes,ano)

  'elimino posibles espacios a los lados de los números que recibo por parámetro

  dia = trim(dia)
  mes = trim(mes)
  ano = trim(ano)

  'compruebo nº de caracteres que recibo en cada parámetro son los permitidos
  'El año puede tener hasta 4 caracteres

  if len(dia)=0 or len(dia)>2 or len(mes)=0 or len(mes)>2 or len(ano)=0 or len(ano)>4 then
    validarFecha = false
    exit function
  end if

  'compruebo que los caracteres de los parámetros son números

  if (not isNumeric(dia)) or (not isNumeric(mes)) or (not isNumeric(ano)) then
    validarFecha = false
    exit function
  end if

  'El mes no puede ser mayor que 12 ni menor que 1

  mes = cint(mes)
  if mes > 12 or mes < 1 then
    validarFecha = false
    exit function
  end if
  dia = cint(dia)

  'El día no puede ser menor que 1

  if dia < 1 then
    validarFecha = false
    exit function
  end if

  'El dia, dependiendo del mes que sea, puede tener unos u otros valores

  if mes=1 or mes=3 or mes=5 or mes=7 or mes=8 or mes=10 or mes=12 then

    'en estos meses puede haber 31 dias

    if dia > 31 then
      validarFecha = false
      exit function
    end if
  elseif mes=2 then

    'en febrero tenemos que ver si es año bisiesto
    'consigo el numero de año de 4 cifras.
    'si nos dan un valor de 2 cifras < 31 se refiere a 2000 más ese valor

    if ano < 31 then
      ano = ano + 2000

    'si nos dan un valor de 2 cifras > 31 se refiere a 1900 más ese valor

    elseif ano < 100 then
      ano = ano + 1900
    end if

    'calculo si el año es bisiesto
    'si es divisible por cuatro y (no divisible por 100 o divisible por 400)

    if ((ano mod 4)=0) and ((ano mod 100)<>0 or (ano mod 400)=0) then

      'es bisiesto

      if dia > 29 then
        validarFecha = false
        exit function
      end if
    else

      'NO es bisiesto

      if dia > 28 then
        validarFecha = false
        exit function
      end if
    end if
  else

    'en todos los demás meses llegan a tener 30 dias

    if dia > 30 then
      validarFecha = false
      exit function
    end if
  end if

  'si estoy aquí es que todas las comprobaciones han sido positivas

  validarFecha = true
end function


El código de la función está comentado para que se pueda entender más fácilmente. Básicamente lo que hace es realizar una serie de comprobaciones, una tras otra. Si alguna de las comprobaciones hace que la fecha sea incorrecta, se devuelve el valor false y se sale de la función. Si se llega al final de la función y ninguna de las comprobaciones falló, se devuelve true, pues la fecha es correcta.

A la hora de calcular si un día es válido, tenemos que saber los días que tiene un mes. Hay que prestar especial atención al mes de febrero, para saber si es bisiesto. Para saber si un año es bisiesto existe la regla siguiente:
  • Son bisiestos todos los años divisibles por 4, excluyendo los que sean divisibles por 100, pero no los que sean divisibles por 400.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

X-TUS

15/2/2006
No es mas facil hacer:
if IsDate(FechaIntroducida) then
Response.Write("La fecha es correcta")
else
Response.Write("La fecha es incorrecta")
End if

y si tienes la fecha dividida en 3 variables seria asi:

if IsDate(Dia & "/"& Mes &"/"& Ano) then
Response.Write("La fecha es correcta")
else
Response.Write("La fecha es incorrecta")
End if

Un saludo

angelo

12/9/2007
jejeje .. tienes muxa razon + facil es azer
k te crees un custormvalidator .. y luego hagas
doble clic sobre el customvalidator e escribas esto

If IsDate(args.Value) Then
args.IsValid = True
Else
args.IsValid = False
End If

Renè Sànchez

18/3/2008
Siempre es bueno tener un còdigo ya probado de una validaciòn que frecuentemente se presenta en las aplicaciones. Gracias.

RG2

29/10/2008
Este codigo no funciona.