|  | 
|   | 
 | 
  Torben Nissen |   Dieses kleine Programm berechnet, wie alt man in Jahren ist.
 'Ein kleines Beispiel, wie man das Alter in Jahren berechnen kann (ab Profan X2).
'von Torben Nissen
'16.04.2015
Declare aktuellesjahr!,aktuellermonat!,aktuellertag!
Declare geburtsdatum$,geburtsdatum!,geburtsjahr!,geburtsmonat!,geburtstag!
Declare alter!,alter$
aktuellesjahr!=@dt("getYear", !now)
aktuellermonat!=@dt("getMonth", !now)
aktuellertag!=@dt("getDay", !now)
geburtsdatum$="17.01.2000"
geburtsdatum!=@dt("setDate", geburtsdatum$)
geburtsjahr!=@dt("getYear", geburtsdatum!)
geburtsmonat!=@dt("getMonth", geburtsdatum!)
geburtstag!=@dt("getDay", geburtsdatum!)
Set("Decimals",0)
If (aktuellertag! < geburtstag!) And (aktuellermonat! = geburtsmonat!)
    alter! = aktuellesjahr! - geburtsjahr! - 1
ElseIf (aktuellertag! > geburtstag!) And (aktuellermonat! = geburtsmonat!)
    alter! = aktuellesjahr! - geburtsjahr!
ElseIf (aktuellertag! = geburtstag!) And (aktuellermonat! = geburtsmonat!)
    alter! = aktuellesjahr! - geburtsjahr!
EndIf
If aktuellermonat! < geburtsmonat!
    alter! = aktuellesjahr! - geburtsjahr! - 1
ElseIf aktuellermonat! > geburtsmonat!
    alter! = aktuellesjahr! - geburtsjahr!
EndIf
alter$=alter!
cls
Print "Alter: "+alter$
WaitInput
End
 |  
  | 
|   | 
 |  | 
|   | 
 
 
  | 
 | 
  HofK | Kann man auch in XProfan die lange Auswahl ersparen?
  In meinem Scopeland-Projekt (Basis SQL) konnte  ich knifflige Funktionen per VB Skript einbetten. Daher der Quelltext Alter am aktuellen Tag und Bestimmung ob minder- oder volljährig an diesem Tag. Das Datumsformat ist offensichtlich JJJJ.MM.TT
  Wenn ich an der Stelle bin, schaue ich mal, wie es bei InfinityProfan aussieht.
  Der "Trick" steckt in der Addition des numerischen Ergebnisses  des Vergleichs (datMT < gebMT) + ... Je nach Sprache muss man also genauer schauen was da passiert und eventuell noch explizite Wandlungen vornehmen.
  Alter am aktuellen Tag
 function alter(geb)
Dim dat, datJ, datMT, gebJ, gebMT
dat = DBToday
If Len(geb)>0 Then
    datJ = Left(dat,4)
    gebJ = Left(geb,4)
    datMT = Mid(dat,6,5)
    gebMT = Mid(geb,6,5)
    alter = (datMT < gebMT)+(datJ-gebJ)
    End If
    end function
 Minder/Volljährig
 function mv(geb)
Dim dat, datJ, datMT, gebJ, gebMT, alter
dat = DBToday
If Len(geb)>0 Then
    datJ = Left(dat,4)
    gebJ = Left(geb,4)
    datMT = Mid(dat,6,5)
    gebMT = Mid(geb,6,5)
    alter = (datMT < gebMT)+(datJ-gebJ)
    If alter < 18 Then
        mv = "m"
    Else
        mv = "v"
        End If
        End If
        end function
 |  
  | 
|   | 
 |  | 
|   | 
 
 
  | 
 | 
  Jörg Sellmeyer | Die Datumsfunktionen sind etwas umständlich und kryptisch aber geben sehr viel Nützliches her. Gerade bei Datumsvergleichen, kann man sich das Aufdröseln in Tag, Monat, Jahr sparen.
  Hier eine Altersermittlung, die sagt, ob ich noch Geburtstag habe, schon hatte oder heute habe:
 Randomize
Var Geburtstag$ = Input$("Bitte Geburtsdatum eingeben","Mein Alter",Dt("GetDate",0,!Now - Rnd(20000)))
Var s$ = Left$(Geburtstag$,6) + Str$(DT("getYear",!Now))'hier ersetze ich einfach die Jahreszahl des Geburtsjahres durch die aktuelle Jahreszahl
Var n% = Dt("CompareDate",!Now,Dt("SetDate",s$))
'laut Hilfe sollte SetDate das eigentlich automatisch machen, das funktioniert aber anscheinend nicht.
Var Alter% = Abs(DT("GetYear",!Now) - DT("GetYear",Dt("SetDate",Geburtstag$)))
Select n%
    CaseOf 1
    print "Du bist am " + Left$(Geburtstag$,6) + Str$(DT("getYear",!Now)) + " " + Str$(Alter%) + " geworden."
    CaseOf 0
    Print "Herzlichen Glückwunsch zum " + Str$(Alter%) + ". Geburtstag!"
    CaseOf -1
    print "Du wirst am " + Left$(Geburtstag$,6) + Str$(DT("getYear",!Now)) + " " + Str$(Alter%)
EndSelect
Print
WaitInput
 Dazu hier die entsprechende Fehlermeldung:  [...]   |  
  | 
|   | 
 | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ...    | 17.04.2015  ▲ |  
  | 
|   | 
 
 
  | 
 | 
  HofK | Für XProfan 11.2 musste ich den "Trick" etwas abändern, Minus...
  return -(datMT$ < gebMT$)+(datJ$-gebJ$)
  Dann klappt's auch, Test mit festem Datum "2015.04.15".
  Nachtrag:  if len(geb$) > 0 war so nur sinnvoll bei Bezug des Geb.-Datums aus der Datenbank, da das Feld auch leer sein konnte.
 print  alter("1978.07.21")
waitinput
proc alter
    parameters geb$
    declare dat$, datJ$, datMT$, gebJ$, gebMT$
    dat$ = "2015.04.15"
    datJ$ = left$(dat$,4)
    gebJ$ = left$(geb$,4)
    datMT$ = mid$(dat$,6,5)
    gebMT$ = mid$(geb$,6,5)
    // print (datMT$ > gebMT$)
    return -(datMT$ > gebMT$)+(datJ$-gebJ$)
endproc
 |  
  | 
|   | 
 |  | 
|   | 
 
 
  | 
 | 
  HofK | Bei InfinityProfan könnte es dann mal so ähnlich gehen:
  |  
  | 
|   | 
 |  | 
|   | 
 
 
  | 
 | 
  HofK |  | 
|   | 
 |  | 
|   | 
 
 
  |