Deutsch
Quelltexte/ Codesnippets

Datumsberechnung

 

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
 
16.04.2015  
 




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

Minder/Volljährig
 
17.04.2015  
 




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

 
18.04.2015  
 




HofK
Bei InfinityProfan könnte es dann mal so ähnlich gehen:
print alter("19781210")// Geburtsdatum im Datenbankformat yyyymmdd

proc alter(geb)

    var dat   = time(10)// 10: aktuelles Datum im Datenbankformat yyyymmdd
    var datJ  = str(dat,1,4)// mit Include eventuell left()
    var gebJ  = str(geb,1,4)
    var datMT = str(dat,1,4)// mit Include eventuell mid()
    var gebMT = str(geb,5,4)
    // print (datMT < gebMT) // zum Test der eventuellen numerischen Repräsentation von true
    // sonst "wandeln"
    return -(datMT < gebMT)+(datJ-gebJ)// ev. dann testen, Minus wie bei Xprofan ???

endproc

 
20.04.2015  
 




HofK
Klaus Hoffmeister (20.04.15)
Bei InfinityProfan könnte es dann mal so ähnlich gehen:



... und so sieht es tatsächlich aus: [...] 
 
10.11.2015  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.705 Betrachtungen

Unbenanntvor 0 min.
Erhard Wirth14.06.2024
H.Brill11.11.2022
p.specht20.11.2021
E.T.20.11.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie