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: 4666
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Curtiu: 1 vez
- 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: 1912
- 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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
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: 1912
- 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.

