Cálculo de dias entre duas datas

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Cálculo de dias entre duas datas

Mensagem por Vandi »

Boa noite,

Preciso de uma rotina que calcule a diferença em dias entre duas datas.
Já encontrei alguma coisa na internet, mas não atendeu da forma que eu preciso.
Se alguém tiver alguma rotina e puder dispor aqui, ficarei muito agradecido.

Gilvandi
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Cálculo de dias entre duas datas

Mensagem por Pablo César »

Já encontrei alguma coisa na internet, mas não atendeu da forma que eu preciso.
Mas você aqui não está dizendo exatamente o que você quer...

Código: Selecionar todos

set date to British
Set century on
dData1:=CtoD("01/01/2012")
dData2:=CtoD("20/01/2012")

? (dData1-dData2)+1 // sem para subtrair, a primeira data tem que ser maior (a data mais antiga).
Veja se este exemplo resolve e senão explique melhor !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Cálculo de dias entre duas datas

Mensagem por alxsts »

Olá!

Se precisa de uma diferença entre duas datas, é só subtrair uma da outra, como no exemplo do Pablo. No exemplo citado, no entanto, as variáveis estão trocadas, gerando um resultado negativo..

O correto é subtrair a data inicial da data final:

Código: Selecionar todos

? (dtFinal - DtInicial)
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Cálculo de dias entre duas datas

Mensagem por Pablo César »

o exemplo do Pablo. No exemplo citado, no entanto, as variáveis estão trocadas, gerando um resultado negativo..
Tá certo Alexandre, eu tinha errado, pior que compilei para ter certeza e acabei esquecendo de corrigir aqui no fórum... rsrs vc tem razão o certo é assim:
set date to British
Set century on
dData1:=CtoD("01/01/2012")
dData2:=CtoD("20/01/2012")

? (dData2-dData1)+1 // sem para subtrair, a primeira data tem que ser a data mais recente
Mas você Alexandre também acabou invertendo a lógica aqui em palavras:

Código: Selecionar todos

O correto é subtrair a data inicial da data final:
O certo seria: "subtrair a data final da data inicial" mais um se quiser contar com o primeiro. Porque só após do primeiro dia, que conta 24 horas quem vem a ser apartir do segundo dia. O certo mesmo, não somar mais um.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Cálculo de dias entre duas datas..Resolvido

Mensagem por Vandi »

Pablo César e Alexandre,
Boa noite...

Realmente é mais fácil do que eu imaginava.
Procurei na internet e achei rotinas complicadas para êsse cálculo em clipper, inclusive pessoas tbém com dúvidas nêsse sentido.
Fiz muitas tentativas, mas sempre insistindo em colocar DTOS(), tipo DTOS(CTOD(ndata2) - DTOS(CTOD(ndata1), por isso não dava certo de jeito algum.
Meus sinceros agradecimentos,

Obrigado...

Gilvandi
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Cálculo de dias entre duas datas

Mensagem por alxsts »

Olá!

Pablo: creio que aritméticamnte esteja correto: subtraio a data inicial da data final. Seria o mesmo que em 20 - 10 = 10. Subtraio 10 de 20 e não 20 de 10.
20/01/2012 (minuendo)
_ (operador)
01/01/2012 (subtraendo)
--------------
19 (diferença ou resto)
Indispensável dizer que as duas variáveis tem que ser do tipo Date. Se não forem, aí entram as funções de conversão:

Código: Selecionar todos

? CtoD("20/01/2012") - CtoD("01/01/2012") 
(considerando um SET Date British). O importante é que o problema do Vandi foi resolvido.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Cálculo de dias entre duas datas

Mensagem por Pablo César »

Pablo: creio que aritméticamnte esteja correto: subtraio a data inicial da data final
Ahhh sim tudo depende ao quê você chama de data inicial...

No seu exemplo abaixo você utilizou diferente, mostrando uma forma mais simples e certa, mas não data inicial menos data final...

Código: Selecionar todos

? (dtFinal - DtInicial)
O importante é que o problema do Vandi foi resolvido.
Sim claro ! Mas temos que ser claros, porque isto poderá ser útil no futuro. Aliás, tópicos abordando este mesmo assunto, aqui no fórum tem muitos, só faltou procurar pelo "Busca"...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder