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.