Página 1 de 1

Soma de horas relogio de ponto

Enviado: 22 Nov 2005 18:21
por marbio
Boa Tarde...

Gostaria de saber como somar as horas do banco de dados esta neste formata

entrada1 saida1 entrada2 saida2

08:30 12:30 13:30 17:30


os campos sao caracter

t+

Enviado: 23 Nov 2005 00:18
por DORNELES
Amigo tenho as rotinas para calcular as horas, desenvolvi um sistema para relógio de ponto a mais de 6 anos, sofri muito para fazer esse calculo.
Vamos lá, primeiro você tem que calcular a diferença entre a entrada e saida de AM (cedo) e a diferença entre a entrada e saida de PM (tarde) e somar os dois resultados.

08:30 12:30 = 4:00
13:30 17:30 = 4:00

nTotHoraAM := Dif_Hora(entrada_am+":00",saida_am+":00")
nTotHoraPM := Dif_Hora(entrada_pm+":00",saida_pm+":00")
//
cHoraAM := SUBSTR(nTotHoraAM,0,2)+SUBSTR(nTotHoraAM,4,2)
cHoraPM := SUBSTR(nTotHoraPM,0,2)+SUBSTR(nTotHoraPM,4,2)
//
Total_Horas := SomaHora(VAL(cHoraAM),VAL(cHoraPM))

me manda o seu e-mail que ti envio as rotinas.

OK

Enviado: 23 Nov 2005 00:22
por rochinha
Amiguinho

Faça uso também destas funções:

Código: Selecionar todos

FUNCTION HoraToMinuto( horas )
   // Transforma horas passadas no formato caracter em um numero   
   // INTEIRO que representa o total de minutos do parametro passado
   IF VALTYPE( horas ) = 'C'
      // HoraToMinuto( "194:20" ) = 11660 min
      RETURN (VAL(SUBSTR(horas,1,AT(":",horas)-1))*60)+VAL(SUBSTR(horas,AT(":",horas)+1,2))
   ELSE
      // HoraToMinuto( 194,20 ) = 11660 min
      RETURN (VAL(SUBSTR(STR(horas,6,2),1,3))*60)+VAL(SUBSTR(STR(horas,6,2),5,2))
   ENDIF

FUNCTION HoraToNumero( horas )
   // Transforma horas passadas no formato caracter em um numero 
   // DECIMAL que representa o total de minutos do parametro passado
   IF VALTYPE( horas ) = 'C'
      A := VAL(SUBSTR(horas,1,AT(":",horas)-1))*60+VAL(SUBSTR(horas,AT(":",horas)+1,2))
   ELSE
      A := VAL(SUBSTR(STR(horas,6,2),1,3))*60+VAL(SUBSTR(STR(horas,6,2),5,2))
   ENDIF
   RETURN VAL(STRZERO(INT(DIV(A,60)),3,0)+"."+STRZERO(MOD(A,60),2,0))

FUNCTION MinutoToHora( horas )
   // Transforma minutos em horario
   IF VALTYPE( horas ) = 'C'
      BEEP()
      // MENSAGEM('Calculo com NUMEROS retornando CARACTER')
      RETURN .F.
   ELSE
      RETURN STRZERO(INT(DIV(horas,60)),3,0)+":"+STRZERO(MOD(horas,60),2,0)
   ENDIF
Exemplos:

Transforma Horas em minutos:

MinutoToHora( "240:00" )
devolve 14400 minutos

Transforma minutos em Horas:

MinutoToHora( 14400 )
devolve "240:00"

Calcular horas:

MinutoToHora( "240:00" ) - MinutoToHora( "120:00" )
devolve 7200 minutos

@braços :?)

Enviado: 23 Nov 2005 00:41
por And
Eu uso FT_ELTIME(cTime1,cTime2) da lib Nanforum Toolkit 2.1 e Timetosec(cTime) e Sectotime(nSeconds) da Nantucket Tools II.


Exemplo:

Expediente determinado = 08:00 as 12:00 e das 13:00 as 17:00
Expediente relógio = 07:30 as 12:00 e das 13:10 as 17:00

nEntrada := Timetosec(determinado)-Timetosec(relógio)
nIntervalo := Timetosec(Ft_eltime(relógio_saida,relógio_entrada))-Timetosec(Ft_eltime(determinado_saida,determinado_entrada))
nSaida := Timetosec(determinado)-Timetosec(relógio)

nAtrasos := 0
nExtras := 0

if nEntrada < 0
nAtrasos += nEntrada
Else
nExtras += nEntrada
endif

if nIntervalo < 0
nAtrasos += nIntervalo
else
nExtras += nIntervalo
endif

if nSaida < 0
nAtrasos += nSaida
else
nExtras += nSaida
endif

cAtrasos := Sectotime(Val(Strtran(Str(nAtrasos),"-","")))
cExtras := Sectotime(nExtras)

Isso para calcular a diferença entre o horário determinado e o horário registrado pelo relógio, pelo menos é assim que faço.


Ps: Caso o que queira realmente é somar (1+1+1+1=4), avise que tenho uma função pronta.


Abraços,

[/b]

Enviado: 06 Jan 2006 14:39
por brandon75
Se possivel enviar-me essas rotinas por e-mail, desde já agradeceria.

ncampos@niconti.com.br

Enviado: 06 Jan 2006 15:05
por filizola
ja existe a funcao elaptime no proprio clipper

Enviado: 07 Jan 2006 01:08
por And
Brandon,

O que quer são as LIBs?


No agurado,

Soma de horas relogio de ponto

Enviado: 29 Set 2021 11:20
por Kapiaba
Bom dia Rochinha: A FUNCTION DIV()??

Código: Selecionar todos

RETURN STRZERO(INT(DIV(horas,60)),3,0)+":"+STRZERO(MOD(horas,60),2,0)
Obg. abs.

Soma de horas relogio de ponto

Enviado: 03 Out 2021 04:53
por mauricioportela
Boa noite!

O DIV seria?

Código: Selecionar todos

FUNCTION DIV(nH,nM)
RETURN (nH/nM)
Att.
Mauricio

Soma de horas relogio de ponto

Enviado: 03 Out 2021 05:02
por mauricioportela
Executando o codigo, obtive isso:

Código: Selecionar todos

#define DUAS_LINHAS    CHR(13) + CHR(10) + CHR(13) + CHR(10)

function main()

    ? "--- Transforma Horas em minutos:"
    ? MinutoToHora("240:00")
    ? "devolve 14400 minutos" // devolveu valor logico. conforme funcao: se tipo for 'C' -> 'L'
    ? DUAS_LINHAS

    ? "--- Transforma minutos em Horas: "
    ? MinutoToHora( 14400 )
    ? "devolve '240:00'" // retornou ok
    ? DUAS_LINHAS

    ? "--- Calcular horas: "
    ? MinutoToHora("240:00") // retorna 'L'
    ? MinutoToHora(val("240:00")) // retorna 'C' ... ficou redundante ... mas, fiz para exemplificar ... rs
    ? DUAS_LINHAS

    ? valtype(MinutoToHora("240:00")) // 'L'
    ? valtype(MinutoToHora(val("240:00"))) // 'C'
    ? MinutoToHora(val("240:00")) - MinutoToHora(val("120:00")) // concatenacao.
    ? MinutoToHora(240) - MinutoToHora(120) // concatenacao.
    ? "devolve 7200 minutos"
    ? DUAS_LINHAS

RETURN Nil

FUNCTION HoraTOMinuto( xHoras )
    // Transforma horas passadas no formato caracter em um numero   
    // INTEIRO que representa o total de minutos do parametro passado
    IF VALTYPE( xHoras ) == "C"
        // Hora2Minuto( "194:20" ) = 11660 min
        RETURN (VAL(SUBSTR(xHoras,1,AT(":",xHoras)-1))*60)+VAL(SUBSTR(xHoras,AT(":",xHoras)+1,2))
    ELSE
        // Hora2Minuto( 194,20 ) = 11660 min
        RETURN (VAL(SUBSTR(STR(xHoras,6,2),1,3))*60)+VAL(SUBSTR(STR(xHoras,6,2),5,2))
    ENDIF
RETURN nTotalMinutos

FUNCTION HoraTONumero( xHoras )
    // Transforma horas passadas no formato caracter em um numero
    // DECIMAL que representa o total de minutos do parametro passado
    IF VALTYPE( xHoras ) == "C"
        A := VAL(SUBSTR(xHoras,1,AT(":",xHoras)-1))*60+VAL(SUBSTR(xHoras,AT(":",xHoras)+1,2))
    ELSE
        A := VAL(SUBSTR(STR(xHoras,6,2),1,3))*60+VAL(SUBSTR(STR(xHoras,6,2),5,2))
    ENDIF
RETURN VAL(STRZERO(INT(DIV(A,60)),3,0)+"."+STRZERO(MOD(A,60),2,0))

FUNCTION MinutoTOHora( xHoras )
    IF VALTYPE( xHoras ) == "C"
        RETURN .F.
    ELSE
        RETURN STRZERO(INT(DIV(xHoras,60)),3,0)+":"+STRZERO(MOD(xHoras,60),2,0)
    ENDIF

FUNCTION DIV( nH, nM)
RETURN (nH/nM)

Soma de horas relogio de ponto

Enviado: 03 Out 2021 08:10
por JoséQuintas
Em Harbour deve existir função específica pra isso.
Criei nos tempos do Clipper.

Código: Selecionar todos

FUNCTION TimeAdd( cTime, cTipo, nQtde )

   LOCAL nHora, nMinuto, nSegundo, cResultado

   nHora    := Val( Substr( cTime, 1, 2 ) )
   nMinuto  := Val( Substr( cTime, 4, 2 ) )
   nSegundo := Val( Substr( cTime, 7, 2 ) )
   DO CASE
   CASE cTipo == "H"
      nHora += nQtde
   CASE cTipo == "M"
      nMinuto += nQtde
   CASE cTipo == "S"
      nSegundo += nQtde
   ENDCASE
   IF nSegundo >= 60
      nMinuto += Int( nSegundo / 60 )
      nSegundo -= ( Int( nSegundo / 60 ) * 60 )
   ENDIF
   IF nMinuto >= 60
      nHora += Int( nMinuto / 60 )
      nMinuto -= ( Int( nMinuto / 60 ) * 60 )
   ENDIF
   IF nHora > 23
      cResultado := "23:59:59"
   ELSE
      nHora := nHora - ( Int( nHora / 24 ) * 24 )
      cResultado := StrZero( nHora, 2 ) + ":" + StrZero( nMinuto, 2 ) + ":" + StrZero( nSegundo, 2 )
   ENDIF

   RETURN cResultado
Pode ser usada pra calcular diferença:

Código: Selecionar todos

FUNCTION DiferencaHora( cTimeInicial, cTimeFinal )

   LOCAL cDiferenca

   cDiferenca := cTimeFinal

   cDiferenca := TimeAdd( cDiferenca, "H", -( Val( Substr( cTimeInicial, 1, 2 ) ) ) )
   cDiferenca := TimeAdd( cDiferenca, "M", -( Val( Substr( cTimeInicial, 4, 2 ) ) ) )
   cDiferenca := TimeAdd( cDiferenca, "S", -( Val( Substr( cTimeInicial, 7, 2 ) ) ) )

   RETURN cDiferenca

Código: Selecionar todos

procedure main()

   SetMode(40,100)
   CLS

   ? DiferencaHora( "08:00:00", "12:00:00" )
   ? DiferencaHora( "13:00:00", "18:00:00" )
   Inkey(0)
difhora.png
difhora.png (2.71 KiB) Exibido 8629 vezes

Soma de horas relogio de ponto

Enviado: 03 Out 2021 08:35
por Jairo Maia
Olá Pessoal,

Em Harbour, use ElapTime( <cStartTime>, <cEndTime> ):

Código: Selecionar todos

? ElapTime( "08:00:00", "10:10:11" )  // retorna 02:10:11"
? ElapTime( "14:00:00", "18:00:00" )  // retorna 04:00:00
? ElapTime( "22:15:00", "01:00:00" )  // virou 1/2 noite - retorna 02:45:00

Soma de horas relogio de ponto

Enviado: 06 Out 2021 09:14
por Kapiaba
Bom dia.

Forum, nota 10!

Protesto: Rochinha sempre posta exemplos pela metade. kkkkkkkkkkkkkkkkkkkkkkk

Obg. abs.

Regards, saludos.