Como mostrar a Idade da pessoa em Anos, Meses, Semanas e Dias ? A partir da data de nascimento até o dia atual (Print de exemplo: https://prnt.sc/ame)
Boa tarde.
Estou utilizando o Delphi 11 e quero que apareça a Idade da pessoa igual eu descrevi no título, ele vai pegar o nascimento a partir de um Text do TEdit. Por enquanto só consegui pegar os anos, quando tempo pegar os meses, ele me retorna um valor super alto, e não sei como prosseguir com o resto.
procedure TfrmIMC.edtNascimentoExit(Sender: TObject); var lAnos, lMeses, lSemanas, lDias : Double; begin lAnos := 0; lMeses := 0; lSemanas := 0; lDias := 0; if length(edtNascimento.Text) >= 8 then begin edtNascimento.Text := StringReplace(edtNascimento.Text,'/','',[rfReplaceAll]); edtNascimento.Text := copy(edtNascimento.Text,1,2)+'/'+copy(edtNascimento.Text,3,2)+'/'+copy(edtNascimento.Text,5,4); lAnos := YearsBetween(Date,StrToDate(edtNascimento.Text)); lMeses := MonthOfTheYear(StrToDate(edtNascimento.Text)); lMeses := MonthsBetween(Date,lMeses); lblIdade.Caption := CurrToStr(lAnos) +' anos; ' +CurrToStr(lMeses) +' meses; ' +CurrToStr(lSemanas) + ' semanas; ' +CurrToStr(lDias) +' dias; '; end; end;
Renato Akira
Curtidas 0
Respostas
Emerson Nascimento
21/07/2022
tente assim:
var dDataIni, dDataFim: TDate; Ano1, Mes1, Dia1: word; Ano2, Mes2, Dia2: word; Anos, Meses, Dias: integer; begin dDataFim := System.SysUtils.Date; // data atual, obtida do sistema dDataIni := DateTimePickerInicial.Date; // no lugar de TEdit usei DateTimePicker // separa a data inicial e final em dia, mes e ano System.SysUtils.DecodeDate(dDataIni, Ano1, Mes1, Dia1); System.SysUtils.DecodeDate(dDataFim, Ano2, Mes2, Dia2); // faz os cálculos para obter a idade em dias, meses e anos Anos := Ano2 - Ano1; Meses := Mes2 - Mes1; Dias := Dia2 - Dia1; if (Dias < 0) then begin Dec(Meses); Dias := 30 + Dias; end; if (Meses < 0) then begin Dec(Anos); Meses := 12 + Meses; end; // apresenta a mensagem na tela Vcl.Dialogs.ShowMessage(Format('%d anos, %d Meses e %d Dias', [Anos, Meses, Dias])); end;
GOSTEI 0
Renato Akira
21/07/2022
Obrigado Emerson, deu certo. Mas poderia me explicar a lógica por trás dos "IFs" ? E o por quê da decrementação?
GOSTEI 0
Emerson Nascimento
21/07/2022
imagine que a data de nascimento é 26/09/1998 e hoje é dia 25/07/2022.
se apenas subtrair o ano (atual - nascimento): 2022 - 1998 daria o resultado 24; 24 anos (errado, porque o mês de nascimento é setembro e ainda 'estamos' em julho).
pra encontrar a quantidade de meses, fazemos a mesma subtração (atual - nascimento), que seria 7 - 9. resultado -2.
no caso o resultado é negativo (< 0), indicando que ainda não chegamos no mês de nascimento, então precisa ser subtraído 1 da idade, passando a 23 anos; também é preciso acrescentar 12 aos meses encontrados para encontrar o número de meses correto (-2 + 12 = 10).
é a mesma lógica para todos os itens: anos, meses e dias.
se apenas subtrair o ano (atual - nascimento): 2022 - 1998 daria o resultado 24; 24 anos (errado, porque o mês de nascimento é setembro e ainda 'estamos' em julho).
pra encontrar a quantidade de meses, fazemos a mesma subtração (atual - nascimento), que seria 7 - 9. resultado -2.
no caso o resultado é negativo (< 0), indicando que ainda não chegamos no mês de nascimento, então precisa ser subtraído 1 da idade, passando a 23 anos; também é preciso acrescentar 12 aos meses encontrados para encontrar o número de meses correto (-2 + 12 = 10).
é a mesma lógica para todos os itens: anos, meses e dias.
GOSTEI 0