Buscar

Adicionar mês(es) a uma data

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;

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Data e hora
Adicionada dia: 28/07/10
Por: Jociel Eloy De Almeida
Visualizada: 5798 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009