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:
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
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
Postar um comentário