Página 1 de 1

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 19:32
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

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 20:21
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 !

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 20:50
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)

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 21:22
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.

Cálculo de dias entre duas datas..Resolvido

Enviado: 20 Mai 2012 21:35
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

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 22:00
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.

Cálculo de dias entre duas datas

Enviado: 20 Mai 2012 22:09
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"...