Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fábio BN

Validar uma data no ASP?

Recommended Posts

Oi RafaelDuPalio, segue o comando:

 

Pode-se usar a função IsDate
If IsDate(Data) = False Then
Response.Write("Data Inválida!")
End If

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

IsDate retorna apenas true ou false. Para validar realmente pode-se usar assim:


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 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, tudo bem?

O comando IsDate faz tudo isso numa só linha, faça um teste:

<%

' Formato Ano/Mes/Dia
'data = "2014/29/02" 'Inválida
'data = "2014/11/31" 'Inválida
'data = "2014/11/30" 'OK
'data = "2014/02/28" 'OK
'data = "2014/02/29" 'Inválida
data = "2016/02/29" 'OK
'data = "2014/13/02" 'Inválida
'data = "2014/02/13" 'Inválida
'data = "2014-12-02" 'ok
'data = "2014-14-02" 'Inválida

 

If IsDate(Data) = False Then
Response.Write("Data Inválida!")
else
Response.Write("Data OK")
End If
%>

 

Basta ir colocando as datas e testando, e veja como funciona que é uma beleza!

 

Você só precisa passar a data para o formato americano antes de testar, eu usaria o comando "right e left" para montar o novo formato, para facilitar você da replace caso tenha "/" ou "-" e depois os insere novamente na nova data! Se depois de feito isso der erro, é por que a data está inválida.

 

Abraços - Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de criar a rotina completa, segue ela:

 

<%

' Verifica Data, se é válida
data_teste = trim(request.form("data_formulario"))
ano = right(data_teste,4) 'Seleciona Ano
mes = right(data_teste,7) 'Seleciona mês e ano
mes = left(mes,2) 'Seleciona mês
dia = left(data_teste,2) 'Selecioina Dia
data_teste = ano&"/"&mes&"/"&dia

if IsDate(data_teste) = False Then
mensagem = "Data Inválida"
response.redirect "erro.asp?msg1="& mensagem
end if

%>

 

Acima está um exemplo de como é possível com comandos simples fazer uma rotina funcional.

 

Abraços - Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o IsDate ele apenas verifica a data e retorna true ou false, agora para vc converter a data e deixá-la válida tem que ser outra function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de criar a rotina completa, segue ela:

 

<%

' Verifica Data, se é válida

data_teste = trim(request.form("data_formulario"))

ano = right(data_teste,4) 'Seleciona Ano

mes = right(data_teste,7) 'Seleciona mês e ano

mes = left(mes,2) 'Seleciona mês

dia = left(data_teste,2) 'Selecioina Dia

data_teste = ano&"/"&mes&"/"&dia

 

if IsDate(data_teste) = False Then

mensagem = "Data Inválida"

response.redirect "erro.asp?msg1="& mensagem

end if

%>

 

Acima está um exemplo de como é possível com comandos simples fazer uma rotina funcional.

 

Abraços - Fábio!

Fabio o gustavo tinha me ajudado em uma consulta por data olha como fica a consulta, mas se colocar uma data diferente ele nao valida esse seu codigo acertaria isso?

 

<%
var_datai = request.form("datai")
var_dataf = request.form("dataf")
if isdate(var_datai) = false or isdate(var_dataf) = false then
response.wirte "A data inicial ou a data final nao é valida, Favor seguir o formato D/M/AAAA!"
response.end
end if
Function invertdata(data)
d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
invertdata = m & "/"& d & "/" & a
SESSION("Vdatai")=var_datai
SESSION("Vdataf")=var_dataf
end function
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)
%>
<%
vSql = "select * from tab_atualizar_brasfels where data between #"&var_datai&"# and #"&var_dataf&"# order BY codigo DESC"
set myrst = server.createObject("ADODB.Recordset")
myRst.Open vSql, conn, 3,3
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, tente isso:

 

<%
var_datai = request.form("datai")
var_dataf = request.form("dataf")
' Verifica Datai, se é válida
data_teste = trim(request.form("datai"))
ano = right(data_teste,4) 'Seleciona Ano
mes = right(data_teste,7) 'Seleciona mês e ano
mes = left(mes,2) 'Seleciona mês
dia = left(data_teste,2) 'Selecioina Dia
datai = ano&"/"&mes&"/"&dia
datai_brasileira = dia&"/"&mes&"/"&ano
if IsDate(datai) = False Then
mensagem = "Data Inválidause o formato DD/MM/AAA"
response.redirect "erro.asp?msg1="& mensagem
end if
' Verifica Dataf, se é válida
data_teste = trim(request.form("dataf"))
ano = right(data_teste,4) 'Seleciona Ano
mes = right(data_teste,7) 'Seleciona mês e ano
mes = left(mes,2) 'Seleciona mês
dia = left(data_teste,2) 'Selecioina Dia
dataf = ano&"/"&mes&"/"&dia
dataf_brasileira = dia&"/"&mes&"/"&ano
if IsDate(dataf) = False Then
mensagem = "Data Inválida, use o formato DD/MM/AAA"
response.redirect "erro.asp?msg1="& mensagem
end if

 

SESSION("Vdatai")=datai_brasileira

SESSION("Vdataf")=dataf_brasileira
vSql = "select * from tab_atualizar_brasfels where data between #"&datai_brasileira&"# and #"&dataf_brasileira&"# order BY codigo DESC"
set myrst = server.createObject("ADODB.Recordset")
myRst.Open vSql, conn, 3,3
%>
Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

teste aquela função que postei

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta ae oque eu fiz usando as dicas do fabio com oke eu já tinha, com esse codigo ele valida o formato da data campo por campo(vlw fabio) e embaixo eu faço a inversão para consultar no access que usa o formato americano:

 

<%
var_datai = trim(request.form("datai"))
var_dataf = trim(request.form("dataf"))
' Verifica Datai, se é válida
data_teste = trim(request.form("datai"))
ano = right(data_teste,4)'Seleciona Ano
mes = right(data_teste,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_teste,2) ' seleciona o dia
datai = ano&"/"&mes&"/"&dia
datai_brasileira = dia&"/"&mes&"/"&ano
if IsDate(datai) = False Then
Response.Write("<script language='JavaScript'>alert('Data inicial Inválida use o formato DD/MM/AAAA!');location.href='Atualizar_bf.html';</script>")
else
' Verifica Dataf, se é válida
data_test = trim(request.form("dataf"))
ano = right(data_test,4)'Seleciona Ano
mes = right(data_test,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_test,2) ' seleciona o dia
dataf = ano&"/"&mes&"/"&dia
dataf_brasileira = dia&"/"&mes&"/"&ano
if IsDate(dataF) = False Then
Response.Write("<script language='JavaScript'>alert('Data Final Inválida use o formato DD/MM/AAAA!');location.href='Atualizar_bf.html';</script>")
end if
end if
Function invertdata(data)
d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
invertdata = m & "/"& d & "/" & a
SESSION("Vdatai")=var_datai
SESSION("Vdataf")=var_dataf
end function
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)
%>
<%
vSql = "select * from tab_atualizar_brasfels where data between #"&var_datai&"# and #"&var_dataf&"# order BY codigo DESC"
set myrst = server.createObject("ADODB.Recordset")
myRst.Open vSql, conn, 3,3
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.