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 )
//--------------------------------------------------------------------------//
contar horas
-
- Posts: 115
- Joined: Sat Mar 07, 2009 9:36 pm
- Location: Argentina
- Contact:
Re: contar horas
Veja a classe para controlar data/hora nesse tópico:
http://forums.fivetechsupport.com/viewt ... me#p126300
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
MSN: SamirAbreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02
xHarbour 1.2.1 + Fwhh 10.6