Clipper On Line • Ver Tópico - Soma de horas relogio de ponto

Soma de horas relogio de ponto

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Soma de horas relogio de ponto

Mensagempor marbio » 22 Nov 2005 17:21

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+
Sempre há uma solucao para os nossos problema clipper.....
Avatar de usuário

marbio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 200
Data de registro: 29 Jul 2004 16:26
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor DORNELES » 22 Nov 2005 23:18

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
DORNELES
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 19
Data de registro: 14 Out 2005 04:51
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor rochinha » 22 Nov 2005 23:22

Amiguinho

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

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 :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Mensagempor And » 22 Nov 2005 23:41

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]
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.
Avatar de usuário

And
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 163
Data de registro: 25 Set 2005 18:31
Cidade/Estado: São Paulo/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Mensagempor brandon75 » 06 Jan 2006 13:39

Se possivel enviar-me essas rotinas por e-mail, desde já agradeceria.

ncampos@niconti.com.br
Avatar de usuário

brandon75
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 32
Data de registro: 17 Jun 2005 14:36
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor filizola » 06 Jan 2006 14:05

ja existe a funcao elaptime no proprio clipper
Avatar de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

Mensagempor And » 07 Jan 2006 00:08

Brandon,

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.
Avatar de usuário

And
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 163
Data de registro: 25 Set 2005 18:31
Cidade/Estado: São Paulo/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Soma de horas relogio de ponto

Mensagempor Kapiaba » 29 Set 2021 11:20

Bom dia Rochinha: A FUNCTION DIV()??

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


Obg. abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Soma de horas relogio de ponto

Mensagempor mauricioportela » 03 Out 2021 04:53

Boa noite!

O DIV seria?

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


Att.
Mauricio
Avatar de usuário

mauricioportela
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 83
Data de registro: 29 Jul 2016 04:22
Cidade/Estado: Vitoria da Conquista/Bahia
Curtiu: 4 vezes
Mens.Curtidas: 21 vezes

Soma de horas relogio de ponto

Mensagempor mauricioportela » 03 Out 2021 05:02

Executando o codigo, obtive isso:

#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)
Avatar de usuário

mauricioportela
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 83
Data de registro: 29 Jul 2016 04:22
Cidade/Estado: Vitoria da Conquista/Bahia
Curtiu: 4 vezes
Mens.Curtidas: 21 vezes

Soma de horas relogio de ponto

Mensagempor JoséQuintas » 03 Out 2021 08:10

Em Harbour deve existir função específica pra isso.
Criei nos tempos do Clipper.

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:

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


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) Visualizado 1309 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Soma de horas relogio de ponto

Mensagempor Jairo Maia » 03 Out 2021 08:35

Olá Pessoal,

Em Harbour, use ElapTime( <cStartTime>, <cEndTime> ):
? 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
Abraç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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Soma de horas relogio de ponto

Mensagempor Kapiaba » 06 Out 2021 09:14

Bom dia.

Forum, nota 10!

Protesto: Rochinha sempre posta exemplos pela metade. kkkkkkkkkkkkkkkkkkkkkkk

Obg. abs.

Regards, saludos.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro