| novabeat hat folgendes geschrieben: |
| aber der code vom Wolff zieht ja nur das geburtsdatum vom aktuellen datumswert ab. das heisst ich bekomm doch die tage seit senem geburtstag sprich: sein alter. |
Deshalb heist die Varable auch schon NextGeb (von
NÄCHSTER Geburtstag) und deshalb hab ich auch bei EncodeDate
2003 ! drin stehen.
Natürlich musst Du hier den nächsten Geburtstag einsetzen. Nicht den eigentlichen, der logischerweise Jahre her ist.
Das erklärt auch, warum Du negative Werte bekommst.
Niemand hat behauptet, daß diese paar Zeilen Code die komplette Funktion seien. Ich geh hier eigentlich davon aus, daß die Leute KEINE Fertiglösung, sondern einen Tip in die richtige Richtung benötigen...
Also bitte nicht heulen, sondern verstehen, weiterdenken und selber umsetzen.
| georgfischerx hat folgendes geschrieben: |
| Typen wie Integer und Word sind sehr begrenzt im Werte-umfang |
Klar. Ein Jahr ist aber auch recht begrenzt in der Anzahl Tage.
Es sollten ja die Tage bis zum nächsten Geburtstag erscheinen. Somit nie größer als 365. (siehe oben)
Hier mal ein komplettes Beispiel (getestet) mit 3 SpinEdits, einem Button und 1 Label: (Und bitte das Jahr im SpinEdit3 4-Stellig eingeben)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.Button1Click(Sender: TObject); var nextGeb : TDate; // Datum des NÄCHSTEN Geburtstages Day, Month, Year, // Zwischenwerte DaysLeft, // Tage bis zum Geburtstag Alter : Word; // Alter begin { Werte aus Eingabefeldern holen } Day := SpinEdit1.Value; Month := SpinEdit2.Value;
{ NextGeb auf Tag und Monat im momentanen Jahr setzen } { CurrentYear liefert das Jahr der aktuellen Systemzeit (4-Stellig)} nextGeb := EncodeDate(CurrentYear, Month, Day);
{ Wenn Geburtstag dieses Jahr schon rum, den im nächsten Jahr nehmen } { Date liefert das Aktuelle Systemdatum ohne Zeit } IF Date > nextGeb then nextGeb := EncodeDate(CurrentYear+1, Month, Day);
{ Tage zwischen nächstem Geburtstag und Heute berechnen } DaysLeft := Trunc(nextGeb - Date);
{ Alter bei nächstem Geburtstag bestimmen } { Um ohne Unit DateUtils an das Jahr zu kommen, } { muß NextGeb komplett dekodiert werden } DecodeDate(NextGeb, Year, Month, Day); Alter := Year - SpinEdit3.Value;
{ In Label1 ausgeben } Label1.Caption := 'Der Kantidat wird in ' +IntToStr(DaysLeft)+' Tagen ' +IntToStr(Alter)+' Jahre alt!'; end; |
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."