Autor Thema: Alter berechnen  (Gelesen 30239 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Alter berechnen
« Antwort #20 am: 08.10.09 - 00:21:50 »
Hallo Bernhard,
du weisst dass ich immer dankbar über deine/eure Hilfe bin, schon oft habt ihr mir weitergeholfen und ich hab einiges gelernt. Von daher natürlich Danke für deine Anmerkungen.

Gerade deswegen  möchte ich da aber schon weiter nachhaken.

Wie gesagt, das ganze dient bei mir dazu, in einer Ansicht in einer berechneten Spalte Kategorien mit Altersstufen zu bilden. Ich hole mir das Geburtsdatum aus einem Eingabefeld einer Maske. Ich gehe eigentlich davon aus, dass wenn ich das Eingabefeld "Geburtsdatum" als Datumsfeld definiere, eine Eingabe à la "Ein schöner Tag im Mai" niemals möglich ist, oder? Was sollte dann da anderes drinstehen als "Nix" oder ein Datum?

Wie kommst du drauf, dass in der Formel mit "unbekannt" gerechnet wird? Wenn nix drinsteht, dann ist das Ergebniss der String "unbekannt", wenn doch was drinsteht, dann wird mit den Datumswerten gerechnet, da kommt dann ein (Alters-)Zahlenwert raus. Die Situation @year("unbekannt") kommt also nie vor.

OK, ich habe in meiner Spalte bisher nicht darauf geachtet, dass das eine Ergebnis ein String, das andere eine Zahl ist, hat aber zumindest in den berechneten Ansichtsspalten noch nie Probleme gemacht. Kann man aber natürlich auch umwandeln. Ich möchte halt in den Fällen, in denen noch keine Alterangabe eingegeben wurde, nicht irgendeine Fehlermeldung drin stehen haben, sondern eine für die Anwender verständliche Meldung.

Ich gebe zu, ich frage grundsätzlich den Inhalt meiner Felder immer mit  - @if xyz = "" - dahingehend ab, ob da was drinsteht oder ob sie noch leer sind. Hat bisher auch bei Zahlen oder Datumsfeldern noch nie Probleme gegeben, aber nun will ichs schon wissen: Wie frage ich ein Zahlenfeld denn korrekt ab, ob es leer ist?

Und letztlich tät mich jetzt doch trotz allem interessieren, ob meine Idee der Altersbestimmung, nämlich einfach zwei große Zahlen aus Jahr, Monat und Tag zu generieren, diese voneinander abzuziehen und dann abzurunden funktioniert. Ich finde diese Lösung nämlich weitaus einfacher als die anderen, und habe bisher kein falsches Ergebnis entdecken können. Aber vielleicht finde ich die Sonderfälle nur nicht, die dir im Kopf rumschweben. Auch bei Schaltjahren konnte ich bisher keinen Fehler entdecken.

Und dieser aus meiner Sicht weitaus einfachere Ansatz war der Grund, warum ich das hier noch an einen alten Thread angehängt habe. Mir schienen die bisherigen Lösungen nämlich einfach viel zu kompliziert.

So, und nun gute Nacht, bis morgen.
Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Alter berechnen
« Antwort #21 am: 28.02.13 - 19:13:29 »
Udo (udo187 udo187) hat mich eben darauf hingewiesen, dass in der von mir geposteten Formel eine arge Falle steckt: @Date (<kein-Schaltjahr<; 2; 29) liefert einen NULL-Wert zurück.
Übel ist in diesem Zusammenhang auch, dass in LotusScript Datenumber (<kein-Schaltjahr>, 2, 29) sehr wohl den darauf folgenden 1. März zurückgibt.

Hilfreich ist in diesem Zusammenhang die Verwendung der @-Funktion @Adjust.
Das von mir gepostete Formelkonstrukt sollte also korrekter lauten:

Code
_Age1 := @Year (Actdate) - @Year (Birthday);
Age2 := @If (@Adjust (@Date (@Year (ActDate); @Month (Birthday); 1); 0; 0; @Day (Birthday) - 1; 0; 0; 0) > ActDate; _Age1 - 1; _Age1);

@Prompt ([Ok]; "Age"; @Text (Age2))

Ich bitte meinen Fehler zu entschuldigen.

Bernhard

Offline tfrenz

  • Aktives Mitglied
  • ***
  • Beiträge: 243
  • Geschlecht: Männlich
Re: Alter berechnen
« Antwort #22 am: 14.01.14 - 14:17:52 »
Habe hier die Formel nach LotusScript gewandelt.

Dim Age As Integer
Dim datum As NotesDateTime

Age = Year(Stichtag.DateOnly) - Year(GebDatum.DateOnly)
Set datum = New NotesDateTime( "1." & Month( GebDatum.DateOnly) & "." & Year(Stichtag.DateOnly))
Call datum.AdjustDay(Day(GebDatum.DateOnly)-1)
If datum.TimeDifferenceDouble(Stichtag) > 0 Then
   Age = Age -1
End If

Messagebox "Age " + Cstr(Age), 0

gruß Thomas
Gruß
Thomas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz