Hi,
bin durch Zufall auf die Frage gestoßen und hab mich aus Interesse mal dran gesetzt.
Meine Lösung ist die folgende:
procedure TForm1.btnGoClick(Sender: TObject);
var
datumText : String;
datumArray : TStringArray;
datumJahr,datumMonat,datumTag : Integer;
aktuellesDatum : String;
aktDatumArray : TStringArray;
aktJahr, aktMonat, aktTag : Integer;
alter : String;
begin
datumText := edtEingabe.Text;
//Validierung fehlt halt noch
// Text aufteilen
datumArray := datumText.Split('.');
datumJahr := StrtoInt(datumArray[2]);
datumMonat := StrtoInt(datumArray[1]);
datumTag := StrtoInt(datumArray[0]);
//aktuelles Datum holen
aktuellesDatum := DateToStr(Date);
aktDatumArray := aktuellesDatum.Split('.');
aktJahr := StrtoInt(aktDatumArray[2]);
aktMonat := StrtoInt(aktDatumArray[1]);
aktTag := StrtoInt(aktDatumArray[0]);
// Falls Jahr nur mit zwei Ziffern angegeben ist
if datumJahr < 100 Then
begin
// Jahr aufspalten und letzte zwei Ziffern mit dem aktuellen Jahr vergleichen
if StrToInt(copy(aktDatumArray[2],3,4)) > datumJahr Then
begin
datumJahr := 2000 + datumJahr;
ShowMessage('True');
end
else begin
datumJahr := 1900 + datumJahr;
end;
end;
// Fallunterscheidung
If ((aktMonat > datumMonat) OR ((aktMonat = datumMonat) AND (aktTag >= datumTag))) Then
begin
alter := IntToStr(aktJahr-datumJahr);
end
else begin
alter := IntToStr(aktJahr-datumJahr-1);
end;
pnlAusgabe.Caption := 'Dein Alter ist ' + alter;
end;
Das Formular dazu sieht dann so aus:
Ist definitiv nicht schön, funktioniert aber.
Punkte: 10