contar horas

Post Reply
juan carlos bellucci
Posts: 115
Joined: Sat Mar 07, 2009 9:36 pm
Location: Argentina
Contact:

contar horas

Post 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 )
//--------------------------------------------------------------------------//
User avatar
sambomb
Posts: 385
Joined: Mon Oct 13, 2008 11:26 am
Location: Itaocara - RJ - Brasil
Contact:

Re: contar horas

Post by sambomb »

Veja a classe para controlar data/hora nesse tópico:

http://forums.fivetechsupport.com/viewt ... me#p126300

Code: Select all

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

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

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

 
Email: SamirSSabreu@gmail.com
MSN: SamirAbreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02
xHarbour 1.2.1 + Fwhh 10.6
Post Reply