Código
* AddMonth()
* Acrescento o número de meses numa data
*
* Autor: Jociel Eloy de Almeida
* Data: 11/MAIO/2004
*
* Exemplo: ShowMessage(FormatDateTime('dd/mm/yyyy',AddMonth(Date,7)));
*}
function AddMonth(const dData: TDateTime; const Months: Extended): TDateTime;
{***
* IsBisexto()
* Retorna 'True' caso o ano seja bisexto
*
*}
function IsBisexto(Ano: Word): Boolean;
begin
Result := (Ano mod 4 = 0) and ((Ano mod 100 <> 0) or (Ano mod 400 = 0));
end;
var
Dia, Mes, Ano: Word;
iMes: Integer;
begin
DecodeDate (dData, Ano, Mes, Dia);
iMes := Mes + Trunc (Months);
if iMes > 12 then begin
Ano := Ano + (iMes - 1) div 12;
iMes := iMes mod 12;
if iMes = 0 then
iMes := 12;
end
else if iMes < 1 then begin
Ano := Ano + (iMes div 12) - 1;
iMes := 12 - Abs(iMes) mod 12;
end;
Mes := iMes;
// Ensure Day of Month is valid
if Mes = 2 then begin
if IsBiSexto(Ano) and (Dia > 29) then
Dia := 29
else if not IsBiSexto(Ano) and (Dia > 28) then
Dia := 28;
end
else if (Mes in [9, 4, 6, 11]) and (Dia = 31) then
Dia := 30;
if Months < 0 then
Result := EncodeDate(Ano, Mes, Dia) - Frac(Abs(Months)) * 30 - Frac(dData)
else
Result := EncodeDate (Ano, Mes, Dia) + Frac(Months) * 30 + Frac(dData);
end;
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009