Cálculo de Intervalo de Tempo

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Cálculo de Intervalo de Tempo

Mensagem por Eolo »

Não sei apareceu alguma outra solução aqui no Forum, mas atendendo ao pedido do Gilberto Silva, segue a função que eu fiz pra calcular o intervalo de tempo entre duas datas/horas.

Eolo

Código: Selecionar todos

* Requisitos: 
  set century on 
  set date british
  horas no formato "hh:mm" e no intervalo "00:00 a "23:59"

Código: Selecionar todos

* Retorno:
  +/- dias , horas : minutos

Código: Selecionar todos

* Exemplos: 

  dia1:=ctod("29/03/2007"), hora1:="17:30" 
  dia2:=ctod("29/03/2007"), hora2:="18:34" 
  ?INTERVALO(dia1,hora1,dia2,hora2) //-> "+0,01:04" 

  dia1:=ctod("29/03/2007"), hora1:="17:30" 
  dia2:=ctod("29/03/2007"), hora2:="17:30" 
  ?INTERVALO(dia1,hora1,dia2,hora2) //-> "0,00:00" 

  dia1:=ctod("29/03/2007"), hora1:="17:30" 
  dia2:=ctod("28/03/2007"), hora2:="10:46" 
  ?INTERVALO(dia1,hora1,dia2,hora2) //-> "-1,06:44" 

Código: Selecionar todos

function INTERVALO(d1,h1,d2,h2)
priv d:=0,h:=0,m:=0,s,si
si=iif(d2>d1 .or. (d2=d1 .and. h2>h1),1,0)
h1=(val(left(h1,2))*60)+val(right(h1,2)) 
h2=(val(left(h2,2))*60)+val(right(h2,2)) 
if si=1
  d2=((d2-d1)*1440)+h2
  d1=h1
  s=d2-d1 
else
  d1=((d1-d2)*1440)+h1
  d2=h2
  s=d1-d2
endi 
do whil .t. 
  if s>59
    if (s/60)>24
      d=int(s/60/24)
      s=s-(d*24*60) 
    else
      h=int(s/60)
      s=s-(h*60)
      if h=24
        h=0
        d=d+1
      endi
    endi 
  else
    m=s
    exit
  endi 
endd 
s=iif((d+h+m)=0,"",iif(si=0,"-","+"))
retu s+alltrim(str(d))+","+strzero(h,2)+":"+strzero(m,2)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Beleza...

o exemplo do Leonardo de imediato resolve meu problema.. mas baixei o seu Eolo... por que uma hora precisa né.. estou trabalhando num programa para transporte escolar, então no momemto será mesmo o calculo só das horas...

Obrigado aos dois...

Em tempo, Leonardo testou a rotina de impressão da Boleta??? funcionou para o que voce queria ???

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Rubens, fiz um teste rapido...funcionou sim...vou implantar em meu sistema as rotina de boleto bancario para varioas bancos....por equanto o harbourboleto....esta se saindo por completo...mas sua rotina é boa ...Vlw...

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder