Jump to content

Archived

This topic is now archived and is closed to further replies.

Fagner Dos Santos

Exibir somente meses em um intervalo de datas

Recommended Posts

Olá,

 

É o seguinte pessoal, tenho duas datas um inicial e uma final. Eu quero listar somente os meses que fazem parte do intervalo das datas por exemplo:

dataini   = cdate("01/05/2014")
datafinal = cdate("01/03/2015")

For i = dataini To datafinal
   'aqui quero listar somente os meses
   response.write month(i)
Next

Quando fiz o for acima, o resultado restornado foi a sequencia de meses para cada dia do mes, por exemplo: 5555555555,666666,7777.....

 

Então como eu faria pra listar somente os meses sem repetição: 5, 6, 7, 8, 9, 10, 11, 12....

Share this post


Link to post
Share on other sites

Dentro do for

 

If month(i) = MesAtual

 

Else

 

Response.write month(i)

MesAtual = month(i)

 

End if

 

Não testei, mas é por ai.

Share this post


Link to post
Share on other sites

Amigo obrigado pela ajuda, eu consegui fazer da seguinte forma também.

dataini = cdate("01/05/2014")
datafinal = cdate("01/03/2015")
qtdmeses = 10

For i = 0 To qtdmeses-1
  dataparcela = DateAdd("m", i, dataini)
  mesparcela = month(dataparcela)
Next

Share this post


Link to post
Share on other sites

 

Amigo obrigado pela ajuda, eu consegui fazer da seguinte forma também.

dataini = cdate("01/05/2014")
datafinal = cdate("01/03/2015")
qtdmeses = 10

For i = 0 To qtdmeses-1
  dataparcela = DateAdd("m", i, dataini)
  mesparcela = month(dataparcela)
Next

Fagner sei que o topico é antigo mas ve se vc pode me ajudar,

preciso fazer a pesquisa entre datas data inicial 01/06/2014 data final 30/06/2014, e que seja exibido eventos entre as datas so que meu banco so me retorna resultado "valido" quando pesquiso com a data mm/dd/aaaa

Exe:.

06/01/2014 até 06/30/2014.

Sabe o que posso fazer para resolver???

Share this post


Link to post
Share on other sites

EsTa assim porque o padrão americano é mês / dia / ano no seu caso faça uma função que inverta as datas... quando lançar dia / mês / ano quando passar na SQL ficara mês / dia / ano

Share this post


Link to post
Share on other sites

formata a data antes.

 

session.lcid=1046
function formatadata(data)
dia=day(data)
mes =month(data)
ano=year(data)
formatadata=dia&"/"&mes&"/"&ano
end function

SQL1 = "INSERT INTO NEWSLETTER (NewsletterNome,NewsletterEmail,NewsletterData,NewsletterHora,NewsletterIP,FL

G_EMAIL) VALUES ('"&Nome&"','"&Email&"',#"&formatadata(NewsletterData)&"#,'"&NewsletterHora&"','"&NewsletterIP&"','"&NewsletterFLG&"')"

Formato: aaaa-mm-dd

<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Year(ConDataBanco) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Formato: dd-mm-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Formato: mm-dd-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Formato: mm/dd/aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"/"& Right("0"&Day(ConDataBanco),2) &"/"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Share this post


Link to post
Share on other sites

session.lcid=1046
function formatadata(data)
dia=day(data)
mes =month(data)
ano=year(data)
formatadata=dia&"/"&mes&"/"&ano
end function

SQL1 = "INSERT INTO NEWSLETTER (NewsletterNome,NewsletterEmail,NewsletterData,NewsletterHora,NewsletterIP,FL

G_EMAIL) VALUES ('"&Nome&"','"&Email&"',#"&formatadata(NewsletterData)&"#,'"&NewsletterHora&"','"&NewsletterIP&"','"&NewsletterFLG&"')"

<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

xanburzum
coloco assim no meu asp antes de recolher a data inicial e data final do meu site?

 

desculpe a burrice mas sou mt leigo se poder colocar mais na pratica ainda agradeço as variaveis que criei que recolhe os dados sao
datai (datainicial)

dataf (datafim).


EsTa assim porque o padrão americano é mês / dia / ano no seu caso faça uma função que inverta as datas... quando lançar dia / mês / ano quando passar na SQL ficara mês / dia / ano

gustavo sabe me falar como fazer isso?? eu uso asp puro com banco de dados em access.

Share this post


Link to post
Share on other sites

no banco o campo esta como data ?

Share this post


Link to post
Share on other sites

Se o xan não tentasse explicar tanto ficaria mais simples DETALHE: o lcid não resolve isso

Na construção sql desde vc colocar a função formatadata coloque a ConverterDataBanco

 

Se ainda não souber onde ... é lá string da sql1 entre as #

Isso serve para as instruções de insert into e update

 

Sucesso!

Share this post


Link to post
Share on other sites

Se o xan não tentasse explicar tanto ficaria mais simples DETALHE: o lcid não resolve isso

Na construção sql desde você colocar a função formatadata coloque a ConverterDataBanco

 

Se ainda não souber onde ... é lá string da sql1 entre as #

Isso serve para as instruções de insert into e update

 

Sucesso!

Gustavo desculpe ocupar seu tempo sou leigo e sei que é chato explicar para quem nao entende muito, mas se poder colocar na pratica e explicar agradeço assim aprendo e repasso o aprendizado.

Meu codigo sql hoje:

 

var_datai = request.form("datai")
var_dataf = request.form("dataf")

 

vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #"&var_datai&"# and #"&var_dataf&"#"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

quando eu listo uma consulta simples de toda linha do banco mostra a data correta so no resultado dessa pesquisa que nao.

Share this post


Link to post
Share on other sites

Vamos lá... na execução sql a mesma é interpretada em inglês com base nesse princípio as datas no inglês é mês /dia / ano e em português é dia /mês / ano devido esse problema você deve aplicar uma função que troque de lugar o dia com o mês veja a mesma abaixo

 

Function invertedata(data)

d = day(cdate(data))

m = month(cdate(data))

a = year(cdate(data))

invertedata = m &"/"& d & "/" & a

End function

 

Depois do request das variaveis coloque

var_datai = invertedata(var_datai)

var_dataf = invertedata(var_dataf)

Share this post


Link to post
Share on other sites

faz igual no post#6 e abaixo do code tem outras funções para formatar. Mas faça como no exemplo e vc pode usar o between direto na SQL, até melhor

 

<%

session.lcid=1046
Function formatadata(data)
dia=day(Data)
Mes=month(Data)
ano=year(Data)
formatadata=ano&"/"&mes&"/"&dia
End Function

e na SQL faz assim:

 

"SELECT distinct produtos FROM linhas WHERE fim BETWEEN '"&formatadata(date)&"' AND '"&formatadata(DateAdd("m",6,Date))&"'

 

"SELECT order_id, shopper_id, date_entered, total, status FROM store_receipt
WHERE date_entered BETWEEN '" & strData1 & "' AND '" & strData2 & "' ORDER BY date_entered DESC"

 

 

depois pode até usar o DateAdd, DateDiff etc tudo na SQL, tipo

 

WHERE date_entered BETWEEN '" & strData1 & "' AND '" & DateAdd("d",1,strData2) & "' ORDER BY date_entered DESC"

Share this post


Link to post
Share on other sites

existem vários exemplos que coloquei no fórum usando datas em vários bds, SQL Server, POstgre, MySQL pode ajudar

Share this post


Link to post
Share on other sites

Em Rafael como você esta usando access as datas além de ser no formato mês/dia/ano elas precisam estar entre tralhas # só isso o esquema é ir aprendendo aos poucos tudo de uma vez fica complicado... desta vez vc aprendeu sobre as datas... porem te aconselho a estudar outros bancos trabalhar na internet com access não é aconselhável

Share this post


Link to post
Share on other sites

Em Rafael como você esta usando access as datas além de ser no formato mês/dia/ano elas precisam estar entre tralhas # só isso o esquema é ir aprendendo aos poucos tudo de uma vez fica complicado... desta vez você aprendeu sobre as datas... porem te aconselho a estudar outros bancos trabalhar na internet com access não é aconselhável

è gustavo percebi mesmo, alem do mais tem mt mais gente que conhece o sql. é pq estou no meio desse meu site quero deixar ele funcional pq poderia fazer os testes com outros bancos com calma sem tirar ele do ar diretamente.

vou fazer o teste agora e posto aqui como ficou

Share this post


Link to post
Share on other sites

So não esquece de colocar as tralhas pois é um campo data só se fosse PostgreSQL que apóstrofos na SQL :innocent:

Gustavo tentei como vc falou criei a função para converter a data e depois de pegar as datas com o request.form fiz o comando para conversao var_datai = invertedata(var_datai) e o mesmo com o dataf.

ae me retorna o seguinte erro

 

Microsoft JET Database Engine erro '80040e07'

Erro de sintaxe na data na expressão de consulta 'DATA between ## and ##'.

 

tentei dar um response.write(var_datai) e response.write(var_dataf) mas nao me mostra os valores que ficou melhor nao me mostra nda a pagina em branco apenas.

Share this post


Link to post
Share on other sites
teste assim cole a função invertedata na mesma página!!! eu poderia de falar para colar numa outra e fazer o include mas vamos passo-a-passo!! NÃO INDICO A CHAMA A FUNÇÃO DE INVERTEDATA DE FORMATADATA por que formatar tem pode se tratar de máscaras de campo mas não é regra!!

var_datai = request.form("datai")

var_dataf = request.form("dataf")

response.write "antes de trocar " & var_datai & " - " & var_dataf & "<br>"

var_datai = invertedata(var_datai)

var_dataf = invertedata(var_dataf)

response.write "depois de trocado " & var_datai & " - " & var_dataf & "<br>"

response.end 'até aqui para ver o resultado!! se ver os dados normais e invertidos remova o response.end

 

vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #" & var_datai & "# and #" & var_dataf & "#"
response.write "<br>" & vSql
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

if myRst.eof and myRst.bof then

response.write "<br>Não tem registros entre essas datas!!"

else

while not myRst.eof

response.write "<br>" & myRst(0) ' pode ser assim também myRst("NOMEDOCAMPO") o zero é o indice do select

myRst.movenext

wend

end if

'teste ai!!

'sucesso!

Share this post


Link to post
Share on other sites

 

teste assim cole a função invertedata na mesma página!!! eu poderia de falar para colar numa outra e fazer o include mas vamos passo-a-passo!! NÃO INDICO A CHAMA A FUNÇÃO DE INVERTEDATA DE FORMATADATA por que formatar tem pode se tratar de máscaras de campo mas não é regra!!

 

var_datai = request.form("datai")

var_dataf = request.form("dataf")

 

response.write "antes de trocar " & var_datai & " - " & var_dataf & "<br>"

var_datai = invertedata(var_datai)

var_dataf = invertedata(var_dataf)

response.write "depois de trocado " & var_datai & " - " & var_dataf & "<br>"

response.end 'até aqui para ver o resultado!! se ver os dados normais e invertidos remova o response.end

 

vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #" & var_datai & "# and #" & var_dataf & "#"
response.write "<br>" & vSql
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

if myRst.eof and myRst.bof then

response.write "<br>Não tem registros entre essas datas!!"

else

while not myRst.eof

response.write "<br>" & myRst(0) ' pode ser assim também myRst("NOMEDOCAMPO") o zero é o indice do select

myRst.movenext

wend

end if

'teste ai!!

'sucesso!

 

Gustavo mais uma vez obrigado por estar me ajudando fiz como vc falou, criei uma pagina asp so com essas informações, no primeiro response.write retornou a msg de erro que esta esperando para fechar (acho ke ta faltnado aspas duplas) mas entendi o que vc quer fazer e fiz manual mesmo segue o codigo.

 

var_datai = request.form("datai")
var_dataf = request.form("dataf")
response.write (var_datai)
response.write (var_dataf)
Function invertedata(data)
d = day(cdate(data))
m = month(cdate(data))
a = year(cdate(data))
invertdata = m & "/"& d & "/" & a
end function
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
response.write (var_datai)
response.write (var_dataf)
response.write "to aqui"
response.end()

 

vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE data between "&var_datai&" and "&var_dataf&""
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

me retornou a data antes da conversao no formato dd/mm/aaaa igual coloquei no form, depois de aplicar a função invertedata e aplicar o response.write nao volta dado nenhum, ae tirei o response.end ae da a msg que falei:

 

Microsoft JET Database Engine erro '80040e07'

Erro de sintaxe na data na expressão de consulta 'DATA between ## and ##'.

haja paciencia com novatos né

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.