Olá pessoal…
Hoje vou mostrar uma função que desenvolvi para incrementar horas em AdvPL, por exemplo, incrementar 1 hora na hora atual.
Essa função, recebe 3 parâmetros, a hora inicial (por exemplo, “20:00:00”), a quantidade de horas a ser somada (por exemplo, 5) e se irá ser 24 horas (.T. se for Sim, e .F. se for Não), no caso se for 24 horas o resultado respeitará o limite de “23:59:59”.
Abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "Protheus.ch"
/*/{Protheus.doc} zSomaHora
Função que gera a soma de horas através de um valor numérico passado
@author Atilio
@since 18/07/2017
@version 1.0
@type function
@param cHora, characters, Hora Inicial a ser considerada
@param nQtdHoras, numeric, Quantidade de Horas a ser somada
@param l24Horas, logical, Utilizará a máscara de 24 horas? (Máximo de 23:59:59)
@example Exemplos abaixo:
u_zSomaHora("00:00:00", 5) //Retorna "05:00:00"
u_zSomaHora("10:00:00", 5) //Retorna "15:00:00"
u_zSomaHora("20:00:00", 5) //Retorna "01:00:00"
u_zSomaHora("20:00:00", 5, .F.) //Retorna "25:00:00"
/*/
User Function zSomaHora(cHora, nQtdHoras, l24Horas)
Local aArea := GetArea()
Local cHoraFim := ""
Local nHora := 0
Default cHora := Time()
Default nQtdHoras := 0
Default l24Horas := .T.
//Pega as horas e soma com a quantidade desejada
nQtdHoras := Int(nQtdHoras)
nHora := Val(SubStr(cHora, 1, At(':', cHora)-1)) + nQtdHoras
//Se for menor que 10 horas
If nHora < 10
cHoraFim := StrZero(nHora, 2)+":"+SubStr(cHora, At(':', cHora)+1, Len(cHora))
Else
//Se utilizar a máscara de 24 horas (até 23:59:59)
If l24Horas
If nHora > 23
nHora := nHora - (24 * Int(nHora / 24))
EndIf
cHoraFim := StrZero(nHora, 2)+":"+SubStr(cHora, At(':', cHora)+1, Len(cHora))
//Senão, pode ser qualquer máscara de hora (por exemplo, 100:59:59)
Else
cHoraFim := cValToChar(nHora)+":"+SubStr(cHora, At(':', cHora)+1, Len(cHora))
EndIf
EndIf
RestArea(aArea)
Return cHoraFim
Bom pessoal, por hoje é só.
Abraços e até a próxima.
