Função para cálculo de idade diferente
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.)
- 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
Curtidas 0
Respostas
Edilcimar
17/03/2006
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
GOSTEI 0
Djorius
17/03/2006
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:
de qualquer maneira valeu pela ajuda.
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.
GOSTEI 0