FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index Off Topic / Otros temas contar horas
Posts: 115
Joined: Sat Mar 07, 2009 09:36 PM

contar horas

Posted: 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 )
//--------------------------------------------------------------------------//

Posts: 389
Joined: Mon Oct 13, 2008 11:26 AM

Re: contar horas

Posted: 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 (fw): Select all Collapse
//-- 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

Continue the discussion