AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
28.02.20 - 11:01:18
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News: Jetzt mit HCL Notes / Domino 11 und einem Extraboard für Nomad!
Schnellsuche:
+  Das Notes Forum
|-+  Domino 8 und frühere Versionen
| |-+  ND6: Entwicklung (Moderatoren: Axel, eknori, Hoshee, ata, koehlerbv)
| | |-+  Alter berechnen
« vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: Alter berechnen  (Gelesen 20983 mal)
Notestime
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 358


... time for new ways


WWW
« am: 19.09.04 - 09:21:42 »

Hallo!

Wie kann ich in Formelsprache ein Alter berechnen?

Also ich hab in Feld1 das Geburtsdatum als Date/Time Value und ich möchte im brechneten Feld2 das aktuelle alter stehen haben.

Kann mir jemaand helfen?

Danke und Gruß
bernd
Gespeichert

Admin & Designer,
6 Server (4xAIX, 2xLinux),
850 Clients
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11352


« Antworten #1 am: 19.09.04 - 09:38:58 »

_dateOfBirth:="21.10.1959";
_age:=(@TextToNumber(@Text(@TextToTime("Today") - @Date(@TextToTime(_dateOfBirth)))) / 86400) / 365;
@Prompt([Ok];"Alter";@Text(@Integer(_age)))
« Letzte Änderung: 19.09.04 - 09:50:36 von eknori » Gespeichert
Notestime
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 358


... time for new ways


WWW
« Antworten #2 am: 19.09.04 - 18:08:54 »

Danke!!! Funktioniert Super!
 Smiley Smiley Smiley
Gespeichert

Admin & Designer,
6 Server (4xAIX, 2xLinux),
850 Clients
Thomas Schulte
@Notes Preisträger
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 4388


Ich glaub mich tritt ein Pferd


« Antworten #3 am: 20.09.04 - 13:50:44 »

Aber nur wenn du in diesem Jahr nach dem  12.01.1959 geboren worden bist.

Thomas
Gespeichert

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach
HarryB
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 521



« Antworten #4 am: 20.09.04 - 15:29:30 »

Um keine Probleme mit Schaltjahren und älteren Leuten zu bekommen, kann man das auch wie folgt lösen:

------

 _dateOfBirth:=@TextToTime("21.10.1959");
_age:=@If(@Month(@Today) > @Month(_dateOfBirth);@Year(@Today) - @Year(_dateOfBirth);
    @Month(@Today) < @Month(_dateOfBirth);@Year(@Today) - @Year(_dateOfBirth)-1;
    @If(@Day(@Today) >= @Day(_dateOfBirth);@Year(@Today) - @Year(_dateOfBirth);@Year(@Today) - @Year(_dateOfBirth) - 1));
@Prompt([Ok];"Alter";@Text(@Integer(_age)))

------

Viele Grüße
Harry
« Letzte Änderung: 20.09.04 - 15:32:32 von HarryB » Gespeichert

Harald "HarryB" Börger

2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN

Clients: 7.0.2
billygates
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 126


Ich kann 'proprietär' nicht mehr hören!


« Antworten #5 am: 16.01.08 - 11:02:54 »

Oder auch so (als Formel in einem berechneten Datumsfeld):

datum := [21.10.1959];
tmp1   := @Date(@Year(@Now);@Month(datum);@Day(datum));
tmp2   := (@Now-tmp1)/86400;
tmp3   := @Year(@Now) - @Year(datum);
@If(tmp2 > -1; tmp3; tmp3 - 1)
Gespeichert

25 Lotus Notes R7 & R8 Server
auf Win Server & Linux Suse SLES

5500 Lotus Notes R6.5 - R8 Clients & Web Access
auf Win 2000 Prof. & Win XP Prof.
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #6 am: 19.01.08 - 00:46:46 »

Achtung - in unten stehender Formel ist ein böser Bug!
Im Beitrag 21 http://atnotes.de/index.php?PHPSESSID=7594h1jjplgptfnvqalc3tcal4&topic=18281.msg359788#msg359788
wird eine korrigierte Fassung dargestellt und auf das Verhalten von @Date, dem 29. Februar und Nicht-Schaltjahren hingewiesen.

BK, 28.02.2013



Warum nicht als Zweizeiler?  Wink

BirthDay sei das Feld mit dem Geburtsdatum, ActDate das Feld mit dem aktuellen Bezugsdatum (was man ggf. durch @Today ersetzen kann). Age ist (in diesem Fall) das berechnete Feld zur Ausgabe des Alters.

Die erste Zeile des berechneten Feldes prüft zunächst, ob man überhaupt etwas berechnen kann. Dies ist ebenso in einer Aktion mit Ausgabe via @Prompt verwendbar.

Die zweite Zeile berechnet stur das die Jahre von Birthdate bis ActDate. Dumm, wenn Birthday = 11.07.1990 und ActDate = 19.01.2008 - die Person ist dann (ungerechtfertigterweise) schon wehrdienstpflichtig.

Die zweite Zeile normiert Birthday dann auf das Jahr von ActDate (aus 11.07.1990 wird so 11.07.2008), vergleicht dies mit ActDate und reduziert das Alter dann gegebenenfalls um ein Jahr. Ergebnis: Mein Sohn darf heute noch nicht zum Bund einberufen werden  Grin

Code:
@If (!@IsTime (Birthday) | !@IsTime (ActDate); @Return (Age); "");
_Age1 := @Year (Actdate) - @Year (Birthday);
@If (@Date (@Year (ActDate); @Month (Birthday); @Day (Birthday)) > ActDate; _Age1 - 1; _Age1)

Bernhard

PS: Mehr dazu auf dem EntwicklerCamp am 27. Februar 2008
« Letzte Änderung: 28.02.13 - 19:18:09 von koehlerbv » Gespeichert
billygates
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 126


Ich kann 'proprietär' nicht mehr hören!


« Antworten #7 am: 24.01.08 - 14:42:52 »

Zweizeiler??? Also ich kann zählen und komme auf 3!  Smiley
Gespeichert

25 Lotus Notes R7 & R8 Server
auf Win Server & Linux Suse SLES

5500 Lotus Notes R6.5 - R8 Clients & Web Access
auf Win 2000 Prof. & Win XP Prof.
klaussal
Gast
« Antworten #8 am: 24.01.08 - 14:44:27 »

Wenn man bei 0 anfängt zu zählen, dann passt es wieder...  Tongue
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #9 am: 24.01.08 - 14:46:40 »

Die erste Zeile gehört ja "eigentlich" nicht dazu und dient nur der Ordnung und Sauberkeit im Schlachthof  Wink
Und Zeile 2 kann man mit Zeile 3 kombinieren (und dann das Konstrukt aus der neuen Zeile statt der "" in der ersten Zeile einsetzen. Dann hat man einen Einzeiler (kann ihn aber nicht mehr lesen  Grin)

Bernhard
Gespeichert
billygates
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 126


Ich kann 'proprietär' nicht mehr hören!


« Antworten #10 am: 24.01.08 - 15:05:08 »

So in etwa also:

datum := [21.10.1959];
@If(@Now-@Date(@Year(@Now);@Month(datum);@Day(datum)))/86400 > -1; @Year(@Now) - @Year(datum); @Year(@Now) - @Year(datum) - 1)
Gespeichert

25 Lotus Notes R7 & R8 Server
auf Win Server & Linux Suse SLES

5500 Lotus Notes R6.5 - R8 Clients & Web Access
auf Win 2000 Prof. & Win XP Prof.
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #11 am: 24.01.08 - 15:21:37 »

Da fehlt die entscheidende Prüfung auf @IsTime. Davor muss also noch
@If (!@IsTime (Birthday) | !@IsTime (ActDate); @Return (Age); ..............)
Gespeichert
billygates
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 126


Ich kann 'proprietär' nicht mehr hören!


« Antworten #12 am: 24.01.08 - 16:07:19 »

Uah, ich bin müde...
Gespeichert

25 Lotus Notes R7 & R8 Server
auf Win Server & Linux Suse SLES

5500 Lotus Notes R6.5 - R8 Clients & Web Access
auf Win 2000 Prof. & Win XP Prof.
Fineas
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 145


PCLP Dev/Admin 5,6,7,8


« Antworten #13 am: 12.02.08 - 10:38:43 »

Als Einzeiler hätte ich auch noch eine simple Lösung im Angebot:

@If(@Month(d2) * 31 + @Day(d2) >= @Month(d1) * 31 + @Day(d1); @Year(d2)-@Year(d1); @Year(d2)-@Year(d1) - 1 )

Zwei Datumsfelder d1 und d2, ein berechnetes Ergebnisfeld mit der Formel.

Selbstverständlich korrekterweise mit Validierung:

@if(@IsTime(d1) & @IsTime(d2); ... ;"gibts nicht!")
Gespeichert
iukhdh
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 486


To be or notes to be, this is the question


« Antworten #14 am: 07.10.09 - 14:29:59 »

Und was haltet ihr von meiner Einzeilerlösung?

@If(geburtsdatum="";"unbekannt";@Round(((@Year(@Today)*10000+@Month(@Today)*100+@Day(@Today))-(@Year(Geburtsdatum)*10000+@Month(Geburtsdatum)*100+@Day(Geburtsdatum)))/10000))
Gespeichert

Thomas von der IuK
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #15 am: 07.10.09 - 16:31:05 »

Nix.

Bernhard
Gespeichert
iukhdh
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 486


To be or notes to be, this is the question


« Antworten #16 am: 07.10.09 - 16:46:56 »

Schade.  Cry

Und warum nicht?
Gespeichert

Thomas von der IuK
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #17 am: 07.10.09 - 16:53:10 »

Du änderst die Dimensionen von Datums-/Zeit-Werten und rundest dann. Dazu Schaltjahre, @Year ("unbekannt") kommt gar nicht gut und ... wird mir jetzt zu lang.

Bernhard
Gespeichert
iukhdh
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 486


To be or notes to be, this is the question


« Antworten #18 am: 07.10.09 - 17:16:50 »

Ups,
das kommt davon, wenn man sich zu einem Schnellschuss hinreissen lässt und auswendig eine alte Idee wieder aufwärmt, die ich in einer berechneten Spalte einer Ansicht verwende. Passt daher nicht ganz zu der Ausgangsfrage mit den Feldern, muss ich zugeben.

Natürlich darf ich nicht kaufmännisch runden, sondern muss immer abrunden.

Also
@If(geburtsdatum="";"unbekannt";@integer(((@Year(@Today)*10000+@Month(@Today)*100+@Day(@Today))-(@Year(Geburtsdatum)*10000+@Month(Geburtsdatum)*100+@Day(Geburtsdatum)))/10000))

Und du meinst, das funktioniert bei Schaltjahren nicht? ... Muss ich echt mal nachprüfen, bisher war ich der Meinung dass das klappt. Aber jetzt bin ich schon etwas verunsichert ... ob ich heute Nacht gut schlafe?

 Wink
« Letzte Änderung: 07.10.09 - 17:18:28 von iukhdh » Gespeichert

Thomas von der IuK
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #19 am: 07.10.09 - 23:20:23 »

Thomas, Du bist auf dem falschen Dampfer.

Ad a) Hier im Thread wurde gutes bereits gepostet und entsprechend bewertet. Du treibst jetzt eine neue Sau durchs Dorf. Wozu? Zur Überprüfung durch uns - das ist okay und sicherlich auch Deine Intention. Das wäre gut.

Ad b) Deine Formel ist ... untauglich. Wenn Martin Leyrer Dein Post bisher schon gelesen hätte, würde er vermutlich mit einem "Schrei" antworten: "***BERNHARD***!!!" Weil:
Man verarbeitet Datums-/Zeitwerte *IMMER* als Datums-/Zeitwerte und "verwurstet" diese nicht.

Der Murks geht los mit
Code:
@If(geburtsdatum="";"unbekannt";
Das Item Geburtsdatum sollte (für den Rest Deines Codes) ein Datums-/Zeitwert sein. Und dann prüftst Du gegen einen **STRING**? Geht's noch? Das geht dank der Freundlichkeit von Notes in diesen Dingen x mal gut - bei x + 1 knallt es dann: Weit hergeholt, aber (auch) in Notes möglich: Dort steht kein Datums-/Zeitwert oder auch nicht "nichts" (scheinbar!!), sondern "An einem schönen Tag im Mai". Da scheppert es dann heftig - obwohl das doch so schön formuliert war  Grin

Der Murks geht weiter mit der Alternative: Nix Geburtsdatum, also wird mit dem String "unbekannt" "gerechnet". Hast Du das schon mal ausprobiert)? @Year ("unbekannt")?

Ich finde das Einbringen Deiner Idee sehr gut. Das ist einer der Dinge, wofür wir hier bei AtNotes stehen - Dinge diskutieren. Du betreibst das in einer hervorragenden Art und Weise (und wir alle wissen, dass Notes-Programmierung gar nicht Dein Hauptaufgabengebiet ist). Bleib uns bitte in dieser Art gewogen. Bitte! Aber Dein geposteter Code ist einfach ... vollkommen unbrauchbar.

Ich hoffe sehr, Du verstehst meine Replik (bitte) nicht falsch.

Bernhard

PS: Vor 15 oder 16 oder 17 Jahren habe ich mir genau mit einer solchen Idee wie Deiner ganz übel ein "Kuckucksei" ins Nest gelegt. Damals gab es aber AtNotes oder vergleichbares noch nicht  Wink
Gespeichert
Seiten: [1] 2 Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: