| |
|
|
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 | |
|
| |
|
|