contar horas

contar horas

Postby juan carlos bellucci » Thu Mar 08, 2012 11:30 am

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 )
//--------------------------------------------------------------------------//
juan carlos bellucci
 
Posts: 115
Joined: Sat Mar 07, 2009 9:36 pm
Location: Argentina

Re: contar horas

Postby sambomb » Thu Mar 08, 2012 12:30 pm

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()

 
Email: SamirSSabreu@gmail.com
xHarbour 1.2.3 + Fwhh 20.2
User avatar
sambomb
 
Posts: 388
Joined: Mon Oct 13, 2008 11:26 am
Location: Itaocara - RJ - Brasil


Return to Off Topic / Otros temas

Who is online

Users browsing this forum: No registered users and 5 guests