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?
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 (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.