Alter bestimmen
Alter bestimmen
Hallo,
ich habe eine Datum als Text mit folgende Format: <Tag>.<Monat>.<Jahr> (z.B. "23.02.1888")
wie berechne ich das Alter bezogen auf das Datum von Heute?
Danke und Gruß
MarcelX
ich habe eine Datum als Text mit folgende Format: <Tag>.<Monat>.<Jahr> (z.B. "23.02.1888")
wie berechne ich das Alter bezogen auf das Datum von Heute?
Danke und Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Re: Alter bestimmen
Einfach das Geburtsdatum hochzählen, bis das heutige Datum erreicht ist.
Mal einfach so hingekritzelt....
Mal einfach so hingekritzelt....
Code: Alles auswählen
Procedure Alter_Ausrechnen(Date)
Protected Heute = Date()
Protected Result = 0, tmp = date
; Datum hochzählen
While Heute >= tmp
tmp = AddDate(tmp, #PB_Date_Year, 1)
Result + 1
Wend
; Falls Geburtsdatum innerhalb des Jahres noch nicht erreicht ist...
If tmp > Date
Result - 1
EndIf
ProcedureReturn Result
EndProcedure
Datum = Date(1980, 3, 10, 0, 0, 1)
Debug Alter_Ausrechnen(Datum)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Alter bestimmen
Danke für den Ansatz; leider dauert es ewig mit z:B. das Jahr 1888
Ich habe gerade mit eine DB-Lösung probiert und funktioniert:
Ich habe gerade mit eine DB-Lösung probiert und funktioniert:
Code: Alles auswählen
UseSQLiteDatabase()
Enumeration : #Database : EndEnumeration
OpenDatabase(#Database, ":memory:", "", "", #PB_Database_SQLite)
Procedure.s RechneAlter(String$)
Debug String$
If DatabaseQuery(#Database, "SELECT cast(strftime('%Y.%m%d', 'now') - strftime('%Y.%m%d', '"+String$+"') as int)")
If NextDatabaseRow(#Database)
ProcedureReturn GetDatabaseString(#Database, 0)
EndIf
FinishDatabaseQuery(#Database)
EndIf
EndProcedure
Debug RechneAlter("1888-03-10")
CloseDatabase(#Database)
Win-10, PB 5.31 (Windows - x86)
Re: Alter bestimmen
@Bisonte
Die Schleife finde ich unnötig. Du kannst zwei Daten (Plural von Datum) auch subrahieren.
Die Schleife finde ich unnötig. Du kannst zwei Daten (Plural von Datum) auch subrahieren.
Code: Alles auswählen
Procedure Alter_Ausrechnen(Date)
Protected Heute = Date()
Protected Result = 0, tmp = date
Result = Year(Heute)-Year(Date)
; hier noch -1-Abfrage einfügen ob man im letzten Jahr schon Geburtstag hatte!
ProcedureReturn Result
EndProcedure
Datum = Date(1980, 3, 10, 0, 0, 1)
Debug Alter_Ausrechnen(Datum)
Re: Alter bestimmen
mit Date(1888, 3, 10, 0, 0, 1) ergibt bei Debug Alter_Ausrechnen(Datum) 2015
(weil Datum ist = -1)
(weil Datum ist = -1)
Win-10, PB 5.31 (Windows - x86)
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: Alter bestimmen
Bisontes Lösung setzt voraus, dass das Geburtsdatum zwischen dem 1.1.1970 und dem 19.1.2038 liegt, weil die PB-Bibliothek nur Daten im UNIX-Format verarbeitet. Mit dem von MarcelX vorgegebenen Jahr 1888 geht es also schon 'mal nicht.
Dann muss man per Hand vorgehen. Wenn Tag, Monat, Jahr die vorgegebenen Datumsteile sind, erhält man schon 'mal ohne Iteration mit
einen Wert für das Alter in Jahren, der nur dann falsch ist, wenn der Geburtstag im aktuellen Jahr noch nicht erreicht wurde. Also muss man noch prüfen, ob der Geburtstag im aktuellen Jahr erreicht wurde.
Monat < month(Date()) Dann Alter um 1 verringern
Monat =month(Date()) Dann prüfen of Tag <day(Date()) Wenn ja, dann Alter um 1 verringern.
Dann muss man per Hand vorgehen. Wenn Tag, Monat, Jahr die vorgegebenen Datumsteile sind, erhält man schon 'mal ohne Iteration mit
Code: Alles auswählen
Alter=year(Date())-Jahr
einen Wert für das Alter in Jahren, der nur dann falsch ist, wenn der Geburtstag im aktuellen Jahr noch nicht erreicht wurde. Also muss man noch prüfen, ob der Geburtstag im aktuellen Jahr erreicht wurde.
Monat < month(Date()) Dann Alter um 1 verringern
Monat =month(Date()) Dann prüfen of Tag <day(Date()) Wenn ja, dann Alter um 1 verringern.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: Alter bestimmen
Die PB-Datumsfunktionen reichen nur bis zum 01.01.1970 zurück.
Wer mit älteren Werten rechnen möchte, der muss wohl oder übel Alternativen suchen (hier und im englischen Forum gibt es bereits entsprechende Routinen).
Die SQLite-Alternative gefällt mir allerdings auch ganz gut...
Grüße ... Peter
Wer mit älteren Werten rechnen möchte, der muss wohl oder übel Alternativen suchen (hier und im englischen Forum gibt es bereits entsprechende Routinen).
Die SQLite-Alternative gefällt mir allerdings auch ganz gut...
Grüße ... Peter
a²+b²=mc²
Re: Alter bestimmen
ARg... Da hatte ich wieder mal nicht dran gedacht... 1970....
Das mit dem einfach abziehen macht auch Sinn, aber das erste, was mir beim
Lesen einfiel war die Schleife....
Aber die SQL Geschichte find ich höchst interessant

Das mit dem einfach abziehen macht auch Sinn, aber das erste, was mir beim
Lesen einfiel war die Schleife....

Aber die SQL Geschichte find ich höchst interessant

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: Alter bestimmen
Hatte gerade nicht Besseres zu tun.
//Edited : Falsche Abfrage behoben: If Monat > Month(Date())
Code: Alles auswählen
EnableExplicit
Procedure getAlter(Tag.i,Monat.i,Jahr.i)
Protected.i Alter
Alter=Year(Date())-Jahr
If Alter >0 ; Geburtsjahr=aktuelles Jahr-->Alter immer 0
If Monat > Month(Date())
Alter-1
ElseIf Monat=Month(Date())
If Tag<Day(Date())
Alter-1
EndIf
EndIf
EndIf
ProcedureReturn Alter
EndProcedure
MessageRequester("errechnetes Alter",Str(getAlter(23,2,1888)))
//Edited : Falsche Abfrage behoben: If Monat > Month(Date())
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18