boa tarde!
Estou trabalhando com horas e queria calcular o tempo decorrido entre uma hora e outra.
Usando a funcao timetosec(transform(hora2,"@R 99:99:00), transformo para segundos e depois
divido por 60 para transformar em minutos.
horaDigitada1 = 2300
horaDigitada1 = 0000
entrada = timetosec(transform(horaDigitada1,"@R 99:99:00) / 60
saida = timetosec(transform(horaDigitada2,"@R 99:99:00) / 60
duracao = horaDigitada2 - horaDigitada1 // duracao em minutos
Quando passa das 00h não funciona bem.
Alguem tem uma dica?
operacoes com horas
Moderador: Moderadores
operacoes com horas
Boa tarde
Poka
Código: Selecionar todos
/*
MODULO - F_HORAS.PRG
Roberto Oliveira (Poka) Leme/SP
a entrada de horas tem que ser decimal
exemplos: 1,28
dif_horas( 22.30,14.25) = 15.55
*/
////////////////////////////
*-------- HORAS-----------------
FUNCT DIF_HORAS(XHORA1,XHORA2)
// CALCULA O TEMPO
// VERIFICA HORAS E MINUTOS
LOCAL H1,H2,M1,M2,QTH:=0,QTM:=0
LOCAL XTEMPO:=0
// SE F RETORNA -1 , OU RETORNA O TEMPO DE HORAS
IF ! F_HORA(XHORA1).OR. ! F_HORA(XHORA2)
RETU (-1)
ENDIF
IF XHORA1=XHORA2
XTEMPO:=0
ELSEIF XHORA2 > XHORA1 // MESMO DIA
H1:=INT(XHORA1)
H2:=INT(XHORA2)
M1:=1440- ( (INT(H1) *60) + ((XHORA1-H1)*100 ))
M2:=1440- ( (INT(H2) *60) + ((XHORA2-H2)*100 ))
QTM:=M1-M2
XTEMPO:=MINUTOHORA( QTM)
ELSE
// DIA DIEFERENTE (H2 MENOR QUE H1)
M1:=1440- ( (INT(XHORA1) *60) + ((XHORA1-INT(XHORA1))*100 ))
// CALCULO M2 APOS MEIA NOITE
M2:=(INT(XHORA2) *60) + ((XHORA2-INT(XHORA2))*100 )
QTM:= M1+M2
XTEMPO:=MINUTOHORA( QTM)
ENDIF
RETUR (XTEMPO)
/////////////
FUNCT HORAMINUTO(XHORA)
// TRANSFOMA HORAS EM MINUTOS
LOCAL X:=(INT(XHORA)*60)+ ( (XHORA-INT(XHORA))*100 )
RETUR (X)
/////////////
FUNCT MINUTOHORA(XMINUTO)
LOCAL XH,XM , x
// TRANSFOMA MINUTOS EM HORA
XH:= INT(XMINUTO/60 )
XM:=MOD(XMINUTO,60)/100
X:=XH+XM
RETUR ( X)
/////////////
FUNCT F_MINUTO(XHORA)
// XHORA VEM SEMPRE NUMERICO
// VERIFICA SE OS MINUTOS SAO VALIDOS
IF (XHORA-INT(XHORA)) *100 > 59
RETU .F.
ENDIF
RETUR .T.
//////////////////
FUNCT F_HORA(XHORA)
// XHORA VEM SEMPRE NUMERICO
// VERIFICA SE HORA E MINUTOS SAO VALIDOS
IF XHORA>=24 .OR. (XHORA-INT(XHORA) ) *100 > 59
RETU .F.
ENDIF
RETUR .T.
///////////
FUNCT F_SOMAHORAS(XHORA1,XHORA2)
LOCAL m1,m2,XTEMPO
// XHORA VEM SEMPRE NUMERICO
// VERIFICA SE HORA E MINUTOS SAO VALIDOS
M1:= (INT(XHORA1) *60) + (INT(XHORA2)*60)
M2:=( (XHORA1- INT(XHORA1))*100) + ( (XHORA2- INT(XHORA2))*100)
QTM:=M1+M2
XTEMPO:=MINUTOHORA( QTM)
RETUR XTEMPO
operacoes com horas
O problema se dá quando passa para pernoite
ex:
hora inicial 23:00
hora final 00:00
o calculo da 1380 minutos
ex:
hora inicial 23:00
hora final 00:00
o calculo da 1380 minutos
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
operacoes com horas
Olá Pessoal,
Use ElapTime( cHoraIni, cHoraFim ) baseado em horário de 24 horas. Veja se ajuda:
Use ElapTime( cHoraIni, cHoraFim ) baseado em horário de 24 horas. Veja se ajuda:
Código: Selecionar todos
Function Main()
Local cHoraInicial, cHoraFinal
Clear Screen
cHoraInicial := "11:00:00"
cHoraFinal := "01:00:00"
? ElapTime( cHoraInicial, cHoraFinal ) // retorna 14 horas
cHoraInicial := "08:30:00"
cHoraFinal := "18:00:00"
?
? ElapTime( cHoraInicial, cHoraFinal ) // retorna 9 horas e meia
?
Return NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)

