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+

Moderador: Moderadores
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
RETURN STRZERO(INT(DIV(horas,60)),3,0)+":"+STRZERO(MOD(horas,60),2,0)
FUNCTION DIV(nH,nM)
RETURN (nH/nM)
#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)
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
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)
? 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
Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes