Olá,

Neste artigo você verá três funções muito utilizadas em vários sistemas. 

A primeira dica é para obtermos a data do dia da páscoa de qualquer ano, isto é feito geralmente para obter outros feriados e assim efetuar cálculos específicos com datas. A  função é um tanto complexa, mas se você estuda-la com certeza irá conseguir entender e até melhora-la caso julgue necessário.

Function Pascoa(ano: integer):TDate;

var

 y,m,d: word;

 g,i,j,c,h,l: integer;

 e: TDate;

begin

 G := ano mod 19;

 C := ano div 100;

 H := (C – C div 4 – (8*C+13) div 25 + 19*G + 15) mod 30;

 I := H – (H div 28)*(1 -(H div 28)*(29 div (H+1))*((21 – G) div 11));

 J := (ano + ano div 4 + I + 2 – C + C div 4) mod 7;

 L := I – J;

 m := 3 + (L + 40) div 44;

 d := L + 28 – 31*(m div 4);

 y := ano;

 E := EncodeDate(y,m,d);

 Result := E;

end;

Como utilizar?

var

  dPascoa : TDateTime;

Begin

  dPascoa := Pascoa(2011); // Passamos o ano 2011

  Showmessage(' Em 2011 a páscoa é ' +

  ' dia ' + IntToStr(dPascoa.Day) + // Retornamos somente o dia da data

   ' de ' + FormatDateTime('mmmm', dPascoa) ); // Retornamos o nome do mês formatado da data

End;

 

A Segunda dica é para detectar se a data informada é o último dia do mês.

A lógica desta função é bem simples, acrescentando um dia a data informada, se o dia for igual a 1, então esta data certamente é o último dia do mês.

function FimDoMes(Data: TDateTime): boolean;
var
    Ano, Mes, Dia: Word;
begin
  DecodeDate(Data.AddDay(1) , Ano, Mes, Dia);
  Result := Dia = 1;
end;

Como utilizar?

var

  dData : TDateTime;

Begin

  dData := Now; // obtém a data atual

  if FimDoMes(dData) then

    Showmessage(‘ A Data: ‘ +  DateToStr(dData) + ‘ é final do mês’)

  Else

    Showmessage(‘ A Data: ‘ +  DateToStr(dData) + ‘ não é o final do mês’);

End;

 

E a terceira e última dica é para obter o próximo dia útil de uma data.

 Neste caso também não é muito difícil, a lógica é: dado uma data, obtém o número que representa o dia da semana 1= Segunda 7=Domingo, em seguida aplica um incremento/decremento à data retornando como próximo dia útil.  

 

function ProximoDiaUtil(Data : TdateTime) : TDateTime;

var

  iProximoDia : integer;

begin

  // Obtém o dia da semana mais um

  iProximoDia := Data.DayOfTheWeek + 1;

  if iProximoDia = 6 then // é um sábado

     Result := data.AddDay(3)

  else if iProximoDia = 7 then // é um Domingo

     Result := data.AddDay(2)

  else

     Result := data.AddDay(1);

end;

var

  dData : TDateTime;

Begin

  dData := Now; // obtém a data atual

  Showmessage(‘ O próximo dia útil será em ‘ +  DateToStr(ProximoDiaUtil(dData)));

 End;

Simples assim! 

Carlos Eduardo Paulino

cadumicro@hotmail.com