terça-feira, 20 de novembro de 2007

Função para retornar os dias úteis

Pessoal, a medida em que eu tiver tempo (-:, vou postar aqui funções que considero interessantes para o nosso dia-a-dia. A primeira que vou postar aqui é uma para contar os dias úteis em um intervalo de datas. Temos várias funções desse tipo na interne, mas eu achava os algoritimos muito complicados, então resolvi fazer a minha. Chegei a publicar ela no ActiveNews da ActiveDelphi, pra que não viu ai está.

function Dias_Uteis(DataI, DataF:TDateTime):Integer;
var
contador:Integer;
begin
if DataI > DataF then
begin
result := 0;
exit
end;
Contador := 0;
while (DataI <= DataF) do
begin
if ((DayOfWeek(DataI) <> 1) and (DayOfWeek(DataI) <> 7)) then
Inc(Contador);
DataI := DataI + 1

end;
result := Contador;
end;

São apenas dois argumentos, Data Inicial e Data Final, a idéia é fazer um looping enquanto a data inicial for menor que a data final, a partir dai vamos incrementando a data inicial e verificamos se é um sábado ou domingo com a função DayOfWeek, se não for, contamos 1 dia. Simples não?

Depois vamos melhorar essa função permitindo que ele suporte feriados. Até lá!

2 comentários:

Anônimo disse...

Meu amigo

No seu laço vc coloca que a data inicial é maior ou igual a data final, mas logo no inicio vc coloca que a data inicial não pode ser maior que a data final, não seria no seu laço que a data DATAI <= DATAF ?

Rubens Antunes

Cristiano Martins Alves disse...

Não Rubinho, no inicio da função eu faço uma consitência. A Data Inicial NÃO pode ser maior que a data final.

Já no laço, eu faço o lopping enquanto a data inicial for MENOR OU IGUAL A DATA FINAL dai eu vou incrementando a data inicial, no meio do laço eu verifico se a data é um Sabado ou Domingo, se for eu incremento a qtde de dias. Entendeu?

Abraço