Validar uma data com ASP

Função para comprovar se uma data é correta, ou seja, se um dia, mês ou ano são corretos, em páginas programadas com ASP.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 20/2/07
Valorize este artigo:
Vejamos uma função criada com Active Server Pages para fazer uma comprovação de datas. A função recebe um dia, um mês e um ano e comprovam que estes sejam numéricos e que a data criada entre todos é correta e possível no calendário.

A função recebe os dados de dia, mês e ano como string, tal como poderíamos chegar através de um formulário ou como parâmetro em uma URL. Não obstante, visto que ASP é uma linguagem pouco "typed", mesmo passando valores numéricos à função continuará dando resultados corretos.

Como resultado a função devolverá um valor verdadeiro ou falso, dependendo se a data é correta ou incorreta.

O código da função é o seguinte:

'valido uma data
'espero receber tres strings com o dia, o mes e o ano

function validarData(dia,mes,ano)

  'elimino possiveis espacos aos lados dos numeros que recebo por parametro

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

  'comprovo nº de caracteres que recebo em cada parametro sao os permitidos
  'O ano pode ter ate 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
    validarData = false
    exit function
  end if

  'compovo que os caracteres dos parametros sao numeros

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

  'O mes nao pode ser maior que 12 nem menor que 1

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

  'O dia nao pode ser menor que 1

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

  'O dia, dependendo do mes que seja, pode ter uns ou outros valores

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

    'nesses meses pode ter 31 dias

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

    'en fevereiro temos que ver se sera ano bissexto
    'consigo o numero de ano de 4 cifras.
    'se nos derem um valor de 2 cifras < 31 se refere a 2000 mais esse valor

    if ano < 31 then
      ano = ano + 2000

    'se nos derem um valor de 2 cifras > 31 se refere a 1900 mais esse valor

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

    'calculo se o ano eh bissexto
    'se for divisivel por quatro e (nao divisivel por 100 ou divisivel por 400)

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

      'eh bissexto

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

      'NAO eh bissexto

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

    'em todos os demais meses chegam a ter 30 dias

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

  'se estou aqui eh porque todas as comprovacoes foram positivas

  validarData = true
end function


O código da função está comentado para que possa ser entendido mais facilmente. Basicamente, o que faz é realizar uma série de comprovações, uma atrás da outra. Se alguma das comprovações faz com que a data seja incorreta, devolve-se o valor false e sai da função. Se chega-se ao final da função e nenhuma das comprobações falhou, se devolve true, pois a data é correta.

Na hora de calcular se um dia é válido, temos que saber os dias que tem um mês. Temos que prestar especial atenção ao mês de fevereiro, para saber se é bissexto. Para saber se um ano é bissexto existe a seguinte regra:
  • São bissextos todos os anos divisíveis por 4, excluindo os que sejam divisíveis por 100, mas não excluindo os que sejam divisíveis por 400.





Comentários do artigo
Foram enviados 2 comentários ao artigo
2 comentários não revisados
0 comentários revisados

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato