Fórum IDADE COM ANOS, MESES E DIAS. #542498
14/01/2016
0
//Calcular Idade
Function CalculaIdade(DataIni, DataFim : TDateTime) : string;
var Idade : String;
Resto : Integer;
iDia, iMes, iAno, fDia, fMes, fAno : Word;
nDia, nMes, nAno, DiaBissexto : Double;
begin
DecodeDate(DataIni,iAno,iMes,iDia);
DecodeDate(DataFim,fAno,fMes,fDia);
nAno := iAno-fAno;
if nAno > 0 then
nAno := nAno - 1
else
if(fMes = iMes)and(fDia < iDia)then
nAno := nAno - 1;
if fMes < iMes then
begin
nMes := 12 - (iMes-fMes);
if fDia < iDia then nMes := nMes - 1;
end
else if fMes = iMes then
begin
nMes := 0;
if fDia < iDia then nMes := 11;
end
else if fMes > iMes then
begin
nMes := fMes - iMes;
if fDia < iDia then nMes := nMes - 1;
end;
nDia := 0;
if fDia > iDia then nDia := fDia - iDia;
if fDia < iDia then nDia := (DataFim-IncMonth(DataFim,-1))-(iDia-fDia);
Result := '';
if nAno = 1 then Result := FloatToStr(nAno)+ ' Ano '
else if nAno > 1 then Result := FloatToStr(nAno)+ ' Anos ';
if nMes = 1 then Result := Result + FloatToStr(nMes)+ ' Mês '
else if nMes > 1 then Result := Result + FloatToStr(nMes)+ ' Meses ';
if nDia = 1 then Result := Result + FloatToStr(nDia)+ ' Dia '
else if nDia > 1 then Result := Result + FloatToStr(nDia)+ ' Dias ';
end;
procedure Tfrm_cadastro.db_edit_nascimentoExit(Sender: TObject);
var I,F:tdate;
begin
f:=(StrToDate('31/03/2016'));
i:=(StrToDate(db_edit_nascimento.Text));
lbl_idade.Caption:= CalculaIdade(f,i);
end;
Wilter Porto
Curtir tópico
+ 0Post mais votado
15/01/2016
function CalculaIdade(DataIni, DataFim: TDateTime): string;
var
qtdDias, qtdMeses, qtdAnos : Integer;
strDias, strMeses, strAnos : string;
dataAuxiliar: TDate;
begin
qtdDias:= 0;
qtdMeses := 0;
qtdAnos := 0;
qtdMeses := MonthsBetween(DataIni, IncDay(DataFim));
if qtdMeses = 0 then
qtdDias := DaysBetween(DataIni, DataFim)
else
begin
dataAuxiliar := IncMonth(DataIni, qtdMeses);
qtdDias := DaysBetween(dataAuxiliar,DataFim);
end;
if qtdMeses >= 12 then
begin
qtdAnos := Trunc(qtdMeses / 12);
qtdMeses := qtdMeses - (qtdAnos * 12);
end;
if qtdMeses = 1 then
strMeses := '1 mês'
else if qtdMeses <> 0 then
strMeses := Format('%d meses', [qtdMeses]);
if qtdAnos = 1 then
strAnos := '1 ano'
else if qtdAnos <> 0 then
strAnos := Format('%d anos', [qtdAnos]);
if qtdDias = 1 then
strDias := '1 dia'
else if qtdDias <> 0 then
strDias := Format('%d dias', [qtdDias]);
if qtdAnos <> 0 then
Result := strAnos;
if qtdMeses <> 0 then
Result := Result + ' ' + strMeses;
if qtdDias <> 0 then
Result := Result + ' ' + strDias;
end;
Cauê Nishijima
Gostei + 1
Mais Posts
14/01/2016
Raylan Zibel
Gostei + 0
14/01/2016
Wilter Porto
Gostei + 0
15/01/2016
Wilter Porto
Quando coloquei a data 25/06/2015 e deu a idade 9 meses 555 dias.
Outra coisa também preciso armazenar a Idade em anos no banco.
E tenho no edit da data de nascimento preciso limitar a data máxima permitida. coloquei o código
if dm_conexoes.tbl_cadastro.FieldByName('data_nascimento').AsDateTime > 15/07/2015
then
begin
ShowMessage('Data inválida. A data de nascimento não pode ser maior que 15/07/2015!');
db_edit_nascimento.Clear;
db_edit_nascimento.SetFocus;
exit;
end
else
Contudo todas as datas que coloco inclusive 10/05/2015 exibe a mensagem de data inválida.
Gostei + 0
15/01/2016
Cauê Nishijima
No "if dm_conexoes.tbl_cadastro.FieldByName('data_nascimento').AsDateTime > 15/07/2015 then" tenta colocar :
"if dm_conexoes.tbl_cadastro.FieldByName('data_nascimento').AsDateTime > StrToDate('15/07/2015') then"
Gostei + 0
15/01/2016
Wilter Porto
var DataI,DataF : TDate;
begin
DataF:=(StrToDate('31/03/2016'));
DataI:=(StrToDate(db_edit_nascimento.Text));
lbl_idade.Caption:= CalculaIdade(DataF,DataI);
end;
Gostei + 0
15/01/2016
Cauê Nishijima
lbl_idade.Caption:= CalculaIdade(DataI,DataF);
Gostei + 0
15/01/2016
Wilter Porto
Gostei + 0
16/01/2016
Wilter Porto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)