Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Datas!


marcos_804

Pergunta

Pessoal tenho um problema para poder fazer consulta entre datas.

Não consegui. Não teve santo que fizesse o troço dar certo.

Usei até o between para tentar fazer uma busca entre datas, mas nada deu certo... então tive de desenvolver um algorítimo de próprio punho...

---> Compartilharei com quem quiser...

<%

    '==== Chamando as strings de cod_curso e Cod_funcionario
    Cod_Curso = request.QueryString("Cod_Curso") 'String que busca por curso
    Cod_Funcionario = request.QueryString("Cod_Funcionario") 'String que busca por curso
    

    '========= VERIFICANDO SE AS DUAS DATAS SÃO MESMO DATAS VÁLIDAS ===============================
    If Not IsDate(request.QueryString("data1")) OR Not IsDate(request.QueryString("data2")) then
        response.Write "<br>&nbsp;&nbsp;&nbsp;&nbsp;Alguma das datas digitadas est&aacute; inv&aacute;lida!<br>"
        
        if Not IsDate(request.QueryString("data1")) then
            response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#FF0000;font-weight:bold"">A data (inicial) "& request.QueryString("data1") & " n&atilde;o &eacute; v&aacute;lida</span><br>"
        end if
        
        
        
        if Not IsDate(request.QueryString("data2")) then
            response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#FF0000;font-weight:bold"">A data (final) "& request.QueryString("data2") & " n&atilde;o &eacute; v&aacute;lida</span><br>"
        end if
        
        response.End
    end if
    '========= FIM DE VERIFICAR SE AS DUAS DATAS SÃO MESMO DATAS VÁLIDAS ==========================
    
    
    
    '========= VERIFICANDO SE ALGUM CAMPO DE DATA ESTÁ VAZIO ======================================
    if IsEmpty(request.QueryString("data1")) OR IsEmpty(request.QueryString("data2")) then
        response.Write "As duas datas devem ser digitadas corretamente"
        response.End
    end if
    '========= FIM DE VERIFICAR SE ALGUM CAMPO DE DATA ESTÁ VAZIO =================================
    
    '========= VERIFICANDO SE A PRIMEIRA DATA É MENOR QUE A SEGUNDA DATA ==========================
    if DateDiff("d",request.QueryString("data1"),request.QueryString("data2")) < 0 then
        response.Write "A data inicial ("& request.QueryString("data1") &") deve ser menor que a data final ("& request.QueryString("data2") &")!"
        response.End
    end if
    '========= FIM DE VERIFICAR SE A PRIMEIRA DATA É MENOR QUE A SEGUNDA DATA =====================
    
    
    
    data1 = FormatDateTime(request.QueryString("data1"),2)
    data2 = FormatDateTime(request.QueryString("data2"),2)


    '==== CRIANDA UMA ARRAY DA DATA PARA PODER SEPARAR EM DIA, mês, E ANO
    arrdata1 = split(data1,"/")
    arrdata2 = split(data2,"/")

    '=== VERIFICAR QUAL A DIFERENÇA DE ANO ENTRE A DATA INICIAL E FINAL
    verificarAno = int(arrdata2(2)) - int(arrdata1(2))
    

if verificarAno < 0 then  'Caso diferença de anos seja menor que 0(zero)
    response.Write "Você deve digitar o primeiro ano maior que o segundo ano<br>"
    
elseif int(verificarAno) = int(0) then 'Caso diferença de anos seja 0(zero)

    for xMes = arrdata1(1) to arrdata2(1)
        if int(xMes) < int(10) then
            xMes = "0"& int(xMes)
        else
            xMes = xMes
        end if
        
        if int(xMes) < int(arrdata2(1)) then
        
            '=== VERIFICANDO SE O LOOP DO DIA VAI COMEÇAR EM 1 OU DIA DO mês INICIAL
            if int(xMes) = int(month(data1)) and int(year(data1)) < int(year(data1)+1) then
                diaInicial = day(data1)
            else
                diaInicial = 1
            end if
                                
            for x = diaInicial to 31
                
                if int(x) < int(10) then
                    x = "0"& x
                    else
                    x = x
                end if
                
                '===== VERIFICANDO SE A DATA É VÁLIDA - POR EXEMPLO. NÃO HÁ 31/02/2006
                if IsDate(x &"/"& xMes &"/"& arrdata1(2)) then
                    dataBusca = dataBusca  &" D_Contrato='"& x &"/"& xMes &"/"& arrdata1(2) &"' OR D_Contrato='"& int(x) &"/"& int(xMes) &"/"& arrdata1(2) &"' OR" 
                else
                    dataBusca = dataBusca
                end if
                
            next
        else
            
            '=== VERIFICANDO SE O LOOP DO DIA VAI COMEÇAR EM 1 OU DIA DO mês INICIAL
            if int(xMes) = int(month(data1)) and int(year(data1)) < int(year(data1)+1) then
                diaInicial = day(data1)
            else
                diaInicial = 1
            end if
            
            
            for x = diaInicial to int(arrdata2(0))
            
                if int(x) < int(10) then
                    x = "0"& x
                    else
                    x = x
                end if
                
                
                '===== VERIFICANDO SE A DATA É VÁLIDA - POR EXEMPLO. NÃO HÁ 31/02/2006
                if IsDate(x &"/"& xMes &"/"& arrdata1(2)) then
                    dataBusca = dataBusca  &" D_Contrato='"& x &"/"& xMes &"/"& arrdata1(2) &"' OR D_Contrato='"& int(x) &"/"& int(xMes) &"/"& arrdata1(2) &"' OR" 
                else
                    dataBusca = dataBusca
                end if
                                
                
                'dataBusca = dataBusca  &" D_Contrato="& x &"/"& xMes &"/"& arrdata1(2) &" OR<br>" 
            next
        end if
    next


else

    for xAno = arrdata1(2) to arrdata2(2)
        
        if int(xAno) < int(arrdata2(2)) then
            for xMes = int(arrdata1(1)) to 12
            
                '=== VERIFICANDO SE O LOOP DO DIA VAI COMEÇAR EM 1 OU DIA DO mês INICIAL
                if int(xMes) = int(month(data1)) and int(year(data1)) < int(year(data1)+1) then
                    diaInicial = day(data1)
                else
                    diaInicial = 1
                end if
                
                
                for x = diaInicial to 31
                    
                    if int(x) < int(10) then
                        x = "0"& int(x)
                        else
                        x = x
                    end if
                    
                    if int(xMes) < int(10) then
                        xMes = "0"& int(xMes)
                        else
                        xMes = xMes
                    end if
                
                    '===== VERIFICANDO SE A DATA É VÁLIDA - POR EXEMPLO. NÃO HÁ 31/02/2006
                    if IsDate(x &"/"& xMes &"/"& xAno) then
                        dataBusca = dataBusca  &" D_Contrato='"& x &"/"& xMes &"/"& xAno &"' OR D_Contrato='"& int(x) &"/"& int(xMes) &"/"& arrdata1(2) &"' OR" 
                    else
                        dataBusca = dataBusca
                    end if
                
                    'dataBusca = dataBusca & x &"/"& xMes &"/" & xAno &" OR<br>"
                next
            next
        'end if
        elseif int(xAno) >= int(arrdata2(2)) then
            for xMes = 1 to int(arrdata2(1))
                
                '=== VERIFICANDO SE O LOOP DO DIA VAI COMEÇAR EM 1 OU DIA DO mês INICIAL
                if int(xMes) = int(month(data1)) and int(year(data1)) < int(year(data1)+1) then
                    diaInicial = day(data1)
                else
                    diaInicial = 1
                end if
                
                for x = diaInicial to 31
                
                    if int(x) < int(10) then
                        x = "0"& int(x)
                        else
                        x = x
                    end if
                    
                    if int(xMes) < int(10) then
                        xMes = "0"& int(xMes)
                        else
                        xMes = xMes
                    end if
                    
                    '===== VERIFICANDO SE A DATA É VÁLIDA - POR EXEMPLO. NÃO HÁ 31/02/2006
                    if IsDate(x &"/"& xMes &"/"& xAno) then
                        dataBusca = dataBusca  &" D_Contrato='"& x &"/"& xMes &"/"& xAno &"' OR D_Contrato='"& int(x) &"/"& int(xMes) &"/"& arrdata1(2) &"' OR" 
                    else
                        dataBusca = dataBusca
                    end if
                
                    'dataBusca = dataBusca & x &"/"& xMes &"/" & xAno &" OR<br>"
                next
            next
        end if
    next

end if



    dataBusca = replace(dataBusca,"'","#")            'REPLACANDO (') POR (#) PARA PODER FAZER A BUSCA POR DATAS, pois o banco geral está usando data
    
    '====== FAZENDO A VERIFICAÇÃO SE A BUSCA SERÁ POR UM CURSO ESPECÍFICO OU NÃO
    if int(Cod_Curso) = "" OR int(Cod_Curso) = 0 then
            dataBusca = dataBusca
        else
            dataBusca = replace(dataBusca,"OR"," AND Cod_Curso="& Cod_Curso &" OR")
    end if 'Fim da verificação se a busca será feita pelo curso especifico

        '====== FAZENDO A VERIFICAÇÃO SE A BUSCA SERÁ POR UM FUNCIONARIO ESPERICIFO OU NÃO
        if int(Cod_Funcionario) = "" OR int(Cod_Funcionario) = 0 then
                dataBusca = dataBusca
            else
                dataBusca = replace(dataBusca,"OR"," AND Cod_Indicacao="& Cod_Funcionario &" OR")
        end if 'Fim da verificação se a busca será feita pelo curso especifico
    

    dataBusca = mid(dataBusca,1,len(dataBusca)-3)    'Esta string tira o ultimo "OR" do final da string dataBusca, pois o loop acrescenta demais



response.Write dataBusca

----> O PROBLEMA!

Quanto faço busca de data que tem dias maiores que 12 então ele busca normalmente.

Ex: 13/05/2006

... Mas se eu buscar uma data inferior a 12 então ele entede como data americana (mm/dd/aaaa)

alguém sabe como eu faço para que este burro do computador entenda que eu estou no brasil?

Sem o sessio.LCID, cujo já tentei tambem

Desde já agradeço a atenção de todos.!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

ah não me conformo Marcos, que você fez esse baita codigo aí. está bom, você não conseguiu usar o between... mas tente entender o que aconteceu porque isso aí acaba comprometendo na performance do teu codigo

imprime a consulta, joga no banco e vai vendo

Link para o comentário
Compartilhar em outros sites

  • 0

Eu já tentei imprimir de todas as formas.

Mudei o campo de data para texto, de texto para data.

Usei o between assim:

"SELECT * FTOM TB_Contrato WHERE D_Contrato between #"& data1 &"# and #"& data2 &  "#

Mas não funcionou de forma alguma. Se eu tirar o "#", o script le como se eu quisesse fazer uma divisão.

Não deu certo mesmo.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...