Fórum Função para cálculo de idade diferente #316414

17/03/2006

0

Uma dúvida muito simples. eu tenho que montar uma função que retorne a idade de uma pessoa (que pode ser um bebê). como parâmetros para essa função tenho DataNasc (Data de Nascimento) e DataAtual ambos do tipo TDate. a função tem que me retornar a idade em uma string por causa das diferentes possibilidades de formato em que a data pode vir. seguinte: Se a diferena da data atual menos a data de nascimento for:

- se for maior ou igual a 12 anos a string fica sendo somente o número.
(Ex.: ´12´, ´34´, ´85´, etc.)
- se for menor que 12 anos e maior ou igual a 1 ano então a string retorna o número de anos mais o número de meses.
(Ex.: ´3a7m´, ´8a2m´, ´11a11m´, etc.)
- se for menor que 1 ano e maior ou igual a 1 mês então a string retorna o número de meses e o número de dias.
(Ex.: ´1m´, ´1m25d´, ´7m5d´, etc.)
- se for menor que 1 mês então retorna o número de dias.
(Ex.: ´12d´, ´5d´, ´20d´, etc.)


Djorius

Djorius

Responder

Posts

17/03/2006

Edilcimar

a diferença entre duas datas retorna a quantidade de dias, depois basta tratar, se for maior que trinta faz o tratamento com if´s para retornar os meses, meses e anos ou anos


Responder

Gostei + 0

17/03/2006

Djorius

eu não podia calcular pela diferença de dias porque senão a diferença de, por exemplo, ´12/02/2006´ para ´17/03/2006´ daria 1m e 1d (porque fevereiro só teve 28 dias quando eu queria retornar ´1m5d´.
Fiz da seguinte forma:

function IdadeStr(DataNasc, DataBase: TDateTime): String;
var
   tmpA, tmpM, tmpD: Word;
   tmpData: TDate;
begin
   tmpData := DataNasc;
   tmpA := 0;
   tmpM := 0;
   tmpD := 0;
   //>>Calcula o(s) ano(s)
   tmpA := YearOf(DataBase)-YearOf(DataNasc);
   if MonthOf(DataNasc) > MonthOf(DataBase) then tmpA := tmpA - 1
   else
   if (MonthOf(DataNasc)=MonthOf(DataBase)) and
      (DayOf(DataNasc) > DayOf(DataBase)) then tmpA := tmpA - 1;
   //
   tmpData := IncYear(tmpData,tmpA);
   //>>Calcula o(s) mes(es)
   while (YearOf(tmpData) <> YearOf(DataBase)) or (MonthOf(tmpData) <> MonthOf(DataBase)) do
   begin
      tmpM := tmpM + 1;
      tmpData := IncMonth(tmpData,1);
   end;
   if (DayOf(tmpData) > DayOf(DataBase)) then
   begin
      tmpData := IncMonth(tmpData,-1);
      tmpM := tmpM - 1;
   end;
   //>>Calcula o(s) dia(s)
   while (YearOf(tmpData) <> YearOf(DataBase)) or (MonthOf(tmpData) <> MonthOf(DataBase)) or
         (DayOf(tmpData) <> DayOf(DataBase)) do
   begin
      tmpD := tmpD + 1;
      tmpData := IncDay(tmpData,1);
   end;
   //
   Result := IntToStr(tmpA)+´a´+IntToStr(tmpM)+´m´+IntToStr(tmpD)+´d´;
end;


de qualquer maneira valeu pela ajuda.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar