Obrigado Moacir, esta funcionando.

 

A procedure que voce fez pode-se

passar duas datas e comparar a diferença entre elas,

achei muito bom.

 

 

A rotina que eu tenho envolve 3 Functions, 

calculando qdo for ano Bissexto.

 

Todas em Delphi...

 

Function Bissexto(AYear: Integer): Boolean;

begin

  Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 =
0));

end;

 

Function DiasDoMes(AYear, AMonth: Integer): Integer;

const

  DaysInMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31,
30, 31, 30, 31);

begin

  Result := DaysInMonth[AMonth];

  if (AMonth = 2) and Bissexto(AYear) then Inc(Result);

end;

 

 

Function Idade(DataNasc : TDate) : String;

Var Ano1, Mes1, Dia1 : Word;

  Ano2, Mes2, Dia2 : Word;

  Ano, Mes, Dia : Word;

  Idade : String;

  AuxDia1, AuxDia2 : Integer;

begin

 

  if DataNasc = 0 then

  begin

    Result := '' ;

    Exit ;

  end;

 

  Idade := '';

  DecodeDate(DataNasc, Ano1, Mes1, Dia1);

  DecodeDate(Date, Ano2, Mes2, Dia2);

  AuxDia1 := Dia1;

  AuxDia2 := Dia2;

  if (Dia1 > Dia2) And ((Mes2 - Mes1) = 1) then begin

  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);

  Mes1 := Mes2;

  end else if (Dia1 > Dia2) And (Mes1 <> Mes2) then begin

  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);

  end else if (Mes1 = Mes2) And (Dia1 > Dia2) And (Ano1 <> Ano2) then begin

  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);

  Mes2 := Mes2 + 11;

  Ano1 := Ano1 + 1;

  end;

 

  if (Mes1 > Mes2) And (AuxDia1 <= AuxDia2) then begin

  Ano1 := Ano1 + 1;

  Mes2 := Mes2 + 12;

  end else if (Mes1 > Mes2) And (AuxDia1 > AuxDia2) then begin

  Ano1 := Ano1 + 1;

  Mes2 := Mes2 + 11;

  end;

 

  Ano := Ano2 - Ano1;

  Mes := Mes2 - Mes1;

  Dia := Dia2 - Dia1;

  if Ano > 1 then

  Idade := IntToStr(Ano) +  ' a '  //  ' Anos'

  else if Ano = 1 then

  Idade := IntToStr(Ano) +  ' a ' ; // ' Ano';

 

  if Mes > 1 then

  Idade := Idade + ', ' + IntToStr(Mes) + 'm' //    ' Meses '

  else if Mes <> 0 then

  Idade := Idade + ', ' + IntToStr(Mes) + 'm' ; //  ' Mês ';

 

  If Ano = 0 then

  Delete(Idade, 1, 1);

 

  // NAO COLOQUEI O NUMERO DE DIAS..

  {

  if Dia > 1 then

  Idade := Idade + ' e ' + IntToStr(Dia) + ' Dias'

  else if Dia <> 0 then

  Idade := Idade + ' e ' + IntToStr(Dia) + ' Dia';

  }

 

  if (Mes = 0) And (Ano = 0) then

  Delete(Idade, 1, 3);

 

  if (Ano1 = Ano2) And (Mes1 = Mes2) And (Dia1 > Dia2) then

  Idade := '0';

 

  Result := Idade;

end;

 

 

 

 

 

 

 

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a