Este tópico explica como construir uma fórmula para calcular uma data anterior ou posterior a outra data estabelecida, ou um período de tempo baseado em duas datas fornecidas.
Por exemplo, para calcular uma data anterior ou posterior, considere o seguinte formulário (veja abaixo), em que são especificados uma data de início para uma atividade e um número de dias para que ela expire. O valor do terceiro campo é calculado baseado nos valores dos dois campos anteriores.
Nesse exemplo, o campo Data de Início é um atributo do tipo Data/Hora, e o campo Validade (Dias) é um atributo do tipo Número. Já o campo Data de Expiração é um atributo do tipo Fórmula com saída Data/Hora, que se baseia nos valores dos dois campos anteriores e que segue a estrutura abaixo.
#AjusteData = ((@data_inicio==null) ? DateTime.Today : @data_inicio);
#data_de_expiracao = ((@dias_expiracao>0)? #AjusteData.AddDays( @dias_expiração ) : #AjusteData);
#data_de_expiracao
Nesse caso, o número de dias informado no campo Validade (Dias) será acrescentado à data especificada no campo Data de Início. Isso significa que se um valor negativo for inserido nesse campo, a fórmula calculará uma data passada. Caso nenhuma data seja definida no campo Data de Início, será considerada o dia atual. Se o campo Validade (Dias) estiver em branco, será retornado o valor do campo Data de Início.
Por outro lado, para calcular um período de tempo, considere o exemplo abaixo.
Nesse exemplo, os campos Data de Início Previsto e Data de Término Previsto são atributos do tipo Data/Hora, com a opção de exibir somente uma data selecionada. Por outro lado, os campos Hora de Início Previsto e Hora de Término Previsto também são atributos do tipo Data/Hora, porém com a opção de exibir somente uma hora selecionada transformada em TimeSpan. Já o campo Duração Prevista é um atributo do tipo Fórmula com saída texto que se baseia nos valores dos quatro campos anteriores e que segue a estrutura abaixo. Observe que, para que o resultado da fórmula seja exibido em horas, é necessário utilizar a função ToString para transformar o valor do atributo em um texto com formato em hora, conforme exibido na última linha da fórmula.
#DataTotal = (@DataTerminoPrevisto - @DataInicioPrevisto);
#HoraTotal = (@HoraTerminoPrevisto - @HoraInicioPrevisto);
#total = #DataTotal.Add(#HoraTotal);
T(System.Math).Truncate(#total.HoraTotal).ToString('00') + #total.ToString('\\:mm')
Nota: para mais informações sobre a estrutura DateTime e suas funções, acesse o site https://msdn.microsoft.com/pt-br/library/system.datetime(v=vs.110).aspx.