Page 1 of 1

contar horas

PostPosted: Thu Mar 08, 2012 11:30 am
by juan carlos bellucci
pongo a disposición del foro una función útil en especial en aquellos sistemas donde haya que saber la cantidad de horas trabajadas desde hora de entrada hasta hora de salida.
Espero de esta manera ayudar a quien lo necesite



#include "fivewin.ch"
/*
Ejemplo de uso
total horas trabajadas desde las 10:32 hasta las 18:25
el llamado a la funcion quedaria de la siguiente forma
tHoras := CuentaHoras("10:32","18:25")
o tambien

H1 := "10:32" hora de entrada
H2 := "18:25" hora de salida

se contempla entrada 22:01 pm y salida 06:05 am
tHoras := CuentaHoras(h1,h2)


*/

Function Main()
Local mHoras := CuentaHoras("05:38","06:25")

? mHoras

Return( NIL )



//-----------------------------------------------------------------------//
// Ing Bellucci Juan Carlos
// juanca252@yahoo.com.ar
// Escobar Buenos Aires Argentina
// Parametros 2 ( "00:00" , "00:00")
// Retorna total horas en formato "00:00"
//-----------------------------------------------------------------------//
Function CuentaHoras( H1, H2 )
Local he
Local hs
Local nE
Local nS
Local tHora := 0
Local eHora
Local sHora
Local eMinu
Local sMinu
Local dMinue := 0
Local dMinus := 0
Local hAcumu := 0
Local Cadena := ""

If Empty(H1)
Return( "00:00" )
EndIf
If Empty(H2)
Return( "00:00" )
EndIf

he := H1
hs := H2
nE := Val(SubStr(he,1,2))+ Val(SubStr(hE,4,2))/100
nS := Val(SubStr(hs,1,2))+ Val(SubStr(hs,4,2))/100

eHora := Val(SubStr(he,1,2))
sHora := Val(SubStr(hs,1,2))
eMinu := Val(SubStr(he,4,2))/100
sMinu := Val(SubStr(hs,4,2))/100

////////////////////////////////////////
// Paso 1 Redondeo de Minutos //
////////////////////////////////////////
If eMinu > sMinu
hAcumu := -1
dMinue := 0
Do While eMinu < .60
eMinu := eMinu + .01
dMinue := dMinue + .01
EndDo
Else
If sMinu > eMinu
sMinu := sMinu - eMinu
EndIf
EndIf
////////////////////////////////////////
// Paso 2 Cuento Horas //
////////////////////////////////////////
If sHora > eHora
tHora := 0
Do While eHora < sHora
eHora := eHora + 1
tHora := tHora + 1
EndDo
EndIf
//---- Si entro 22Hs pm del dia de hoy y sale ma¤ana 06 hs am
If eHora > sHora
tHora := 0
Do While eHora < 24
eHora := eHora + 1
tHora ++
EndDo
tHora := tHora + sHora

EndIf
////////////////////////////////////////
// Paso 3 Cuento el resto de Minutos //
////////////////////////////////////////
If sMinu > 0
dMinus := 0
Do While sMinu > dMinus
dMinus := dMinus + .01
EndDo
EndIf
If tHora > 0
tHora := tHora + hAcumu + dMinue + dMinus
EndIf

Cadena := SubStr(StrZero(tHora,5,2),1,2)+":"+ SubStr(StrZero(tHora,5,2),4,2)

Return( Cadena )
//--------------------------------------------------------------------------//

Re: contar horas

PostPosted: Thu Mar 08, 2012 12:30 pm
by sambomb
Veja a classe para controlar data/hora nesse tópico:

viewtopic.php?f=3&t=23499&p=126300&hilit=TDateTime#p126300

Code: Select all  Expand view

//-- Na entrada
oEntrada := TDateTime():New(Date(),Time())

//-- Na saida
oSaida    := TDateTime():New(Date(),Time())

nSegundosTrabalhados := oSaida:Absolute() - oEntrada:Absolute()