Soma de horas relogio de ponto
Moderador: Moderadores
Soma de horas relogio de ponto
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+
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+
Sempre há uma solucao para os nossos problema clipper.....
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
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Faça uso também destas funções:
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 :?)
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
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 :?)
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]
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]
Anderson
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Brandon,
O que quer são as LIBs?
No agurado,
O que quer são as LIBs?
No agurado,
Anderson
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Soma de horas relogio de ponto
Bom dia Rochinha: A FUNCTION DIV()??
Obg. abs.
Código: Selecionar todos
RETURN STRZERO(INT(DIV(horas,60)),3,0)+":"+STRZERO(MOD(horas,60),2,0)
- mauricioportela
- Usuário Nível 2

- Mensagens: 95
- Registrado em: 29 Jul 2016 04:22
- Localização: Vitoria da Conquista/Bahia
- mauricioportela
- Usuário Nível 2

- Mensagens: 95
- Registrado em: 29 Jul 2016 04:22
- Localização: Vitoria da Conquista/Bahia
Soma de horas relogio de ponto
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Soma de horas relogio de ponto
Em Harbour deve existir função específica pra isso.
Criei nos tempos do Clipper.
Pode ser usada pra calcular diferença:
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
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)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Soma de horas relogio de ponto
Olá Pessoal,
Em Harbour, use ElapTime( <cStartTime>, <cEndTime> ):
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:00Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Soma de horas relogio de ponto
Bom dia.
Forum, nota 10!
Protesto: Rochinha sempre posta exemplos pela metade. kkkkkkkkkkkkkkkkkkkkkkk
Obg. abs.
Regards, saludos.
Forum, nota 10!
Protesto: Rochinha sempre posta exemplos pela metade. kkkkkkkkkkkkkkkkkkkkkkk
Obg. abs.
Regards, saludos.

