segunda-feira, 1 de novembro de 2010

Dicas Delphi - Calculo da Idade

Salve, salve amigos
 
//Essa dica é um demostrativo de como se calcular a idade de uma pessoa em anos, 
//meses e/ou dias
//1º Declare na uses a unit DateUtils
//2º Insira um Button e um Maskedit no Form
//3º Na propriedade EditMask do Maskedit insira o formato Date e modifique
//no campo Input Mask esse formato para 4 dígitos no ano e dê OK
//4º No evento OnClick do Button insira o código e execute

procedure TForm1.Button1Click(Sender: TObject);
var

Ano, Mes: Integer;
Total_dias: Real; 
 begin

  //Descobrir a idade somente em anos, meses ou dias...

  ShowMessage(IntToStr(YearsBetween(Date, StrToDate(MaskEdit1.Text))) + ' anos');
  ShowMessage(IntToStr(MonthsBetween(Date, StrToDate(MaskEdit1.Text))) + ' meses');
  ShowMessage(IntToStr(DaysBetween(Date, StrToDate(MaskEdit1.Text))) + ' dias');
  //ou
  //Descobrir a idade em anos, meses e dias, complicando um pouco mais...

 Total_dias := DaysBetween(Date, StrToDate(MaskEdit1.Text));

 Ano := StrToInt(Copy(MaskEdit1.Text, 7, 4));
   while Total_dias > 365 do
     begin
        Total_dias := Total_dias - DaysInAYear(Ano);
        Ano := Ano + 1;
     end
        Mes := StrToInt(Copy(MaskEdit1.Text, 4, 2)); 
        while Total_dias > 28 do
        begin
                if Total_dias >= DaysInAMonth(Ano, Mes) then
                begin
                        Total_dias := Total_dias - DaysInAMonth(Ano, Mes);
                        Mes := Mes + 1;
                end
                else
                break;
        end;
        Ano := Ano - StrToInt(Copy(MaskEdit1.Text, 7, 4));
        Mes := Mes - StrToInt(Copy(MaskEdit1.Text, 4, 2));
 
        if StrToDate(MaskEdit1.Text) <= Date then
           ShowMessage(IntToStr(Ano) + ' anos, ' + IntToStr(Mes) + ' meses e ' + 
          FloatToStr(Total_dias) + ' dias')
        else
        ShowMessage('Impossível realizar cálculo! Data > que a data atual!')
end;
 
Take care 

Um comentário:

Douglas Alves disse...

Adaptei algumas partes, pois usei datetimepicker no lugar dos maskedit...funcionou perfeitamente.
Obrigado por compartilhar seu conhecimento.
Abraço.