Página 1 de 1

Cálculo de Intervalo de Tempo

Enviado: 29 Mar 2007 18:13
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)

Enviado: 03 Set 2007 07:39
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

Enviado: 03 Set 2007 15:06
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