`Register`
Datums-Arithmetik 

Der Umgang mit Datumsangaben ist ein Sonderfall des `Rechnens.` Die FLEX-Sprache hält hierfür einige sehr mächtige Befehle bereit, mit denen ohne tiefere Kenntnis die Datumsarithmetik leicht beherrschbar ist. 

date b
    Datum (und Uhrzeit) werden in die interne Variable kopiert. Default für b ist 17.
b = Breite des Datums, 8-17 Byte; 8 ist nur das Datum, 17 ist Datum/vollständige Uhrzeit 
Das Ergebnis am 7.5.2007 um 20:25 wäre (mit b=17): 
2 0 0 7 0 5 0 7 / 2 0 : 2 5 : 0 0 

Dieses speichert man mit   `insert`...   in eine Kategorie, ein Teilfeld oder eine #uxy 

Die so erzeugte Art des Datums hat den großen Vorteil, maschinell sortierbar zu sein.  Der Befehl ist aber eigentlich Luxus, denn genau dasselbe erhält man mit der Sonderkategorie #dts: 
var #dts(0,b)   acon

Tip: Das Tagesdatum in der (nicht maschinell sortierbaren) Form, z.B.   Mon, 5. Dec 2011  kann man sich so besorgen: 

var #dt   acon

dann steht es in der iV. 

Sonderbefehle für Datumsrechnungen: 

day +x / -x    acon
Nummer des heutigen Tages  +x   bzw. -x  Tage innerhalb des betreffenden Jahres. Wenn z.B. heute der 31.12. ist, ergibt  day +1  den Wert 1.

Day +x / -x   acon
Datum des heutigen Tages +x  bzw. -x Tage, und zwar in der Form 
   JJJJMMTT/hh:mm:ss = Tag, TT. Monat Jahr
z.B. 20010423/10:18:56 = Mo, 23. Apr 2001

Ist ein negativer Wert angegeben, also -x , dann wird zurückgerechnet. 
Der Wert x  darf bis zu 12000 betragen (Zeitspanne 1970 bis 2099). 
Ist hinter  Day  nichts angegeben, wird der Inhalt der iV genommen (d.h. diese muß mit + bzw. - beginnen). 

Day datum
Vom Datum datum, in der Form JJJJMMTT angegeben, wird umgerechnet auf die Form 
   JJJJMMTT/00:00:00 = WT, TT. MN. JJJJ
die dann in der iV steht. Dabei ist WT der Wochentag (Mo, Di, ...) und MN der Monatsname (Jan, Feb, ...)
Das Wichtigste: hiermit kann man zu einem gegebenen Datum den Wochentag feststellen. 
Dies funktioniert für die Jahre 1901 bis 2099. Beispiel:
	Day 20051224  ergibt  20051224/00:00:00 = Sa, 24. Dez. 2005 

Day datum+x
Day datum-x
Vom Datum datum, in der Form JJJJMMTT angegeben, wird x Tage weiter- bzw. zurückgerechnet.
Das sich ergebende Datum steht dann in der iV, und zwar ebenfalls in der Form
   JJJJMMTT/00:00:00 = TN, TT. MN. Jahr

Day datum1-datum2
Differenz in Tagen zwischen datum1 und datum2 , beide in der Form JJJJMMTT 
Die Zahl steht dann in der iV. Beide Daten müssen zwischen 1971 und 2037 liegen.

Beispiele: Zur Demonstration der Datumsbefehle kann man sich die Datei  `holidays.flx` anschauen, mit der die Berechnung der `kirchlichen Feiertage` durchgeführt wird. Gebraucht wird dabei die Berechnung des Osterdatums, die man sich als Unterprogramm auch aus dem FLEX  `gauss.flx`  kopieren kann. 
Einfachere Beispiele sind die FLEXe `weekday.flx` und `ostertag.flx`, mit denen man die Wochentage eines gewünschten Datums von 1901 bis 2099 feststellen kann bzw. das Datum des Osterfestes von 1700 bis 2199.
Ferner: `leapyear.flx` zur Feststellung, ob ein gegebenes Jahr ein Schaltjahrist. 
Die umfangreichste Anwendung der Datumsbefehle ist die `Kalenderfunktion`, die mit V25.5 herausgebracht wurde. Sie liefert Kalenderblätter für die Jahre 1601 bis 2399. Das wurde möglich durch eine Weiterentwicklung:

Alternative  (auch für acon )
Ab V29.2 gibt es ein FLEX-Unterprogramm :Day (verpackt in day.inc), das einen größeren Aktionsradius hat, und zwar 1601 bis 2399. 
Statt wie bisher 
var ... 
Day  

schreibt man damit gleichwertig (und das versteht auch acon): 

var ... 
perform Day 
... 
end 
include day.inc    // da steckt das UP  :Day  drin 

Sonderbefehl: 

Wday +x / -x     acon
Datum des heutigen Tages +x bzw. -x Arbeitstage , und Form wie bei Day +x 
Voraussetzung: Es sind Kalendersätze für das laufende und nachfolgende Jahr geladen. Das geschieht mit dem Befehl `kalend`. Kalendersätze anlegen kann man mit dem FLEX  `a-kalend.flx`.
Gebraucht wird dies zur Errechnung des Rückgabedatums bei Ausleihen (aLF). 

Beispiel 1:   `Ausprobieren`
Ziel: aktuelles Datum aus JJJJMMTT  in  TT-MM-JJJJ umwandeln 

 aktuelles Datum in die iV holen (das sind immer 8 Ziffern)
date 8 
 in Nutzervariable #uad ablegen 
ins #uad 
 einzelne Teile zusammenbauen zu der Form  Tag-Monat-Jahr
var #uad(6,2) "-" #uad(4,2) "-" #uad(0,4) 

Beispiel 2:
Ziel: aktuelles Datum in der Form  17. Mar 2005  in der iV bereitstellen 

 Variable #dt benutzen (Handb.10.2.6.2), Wochentag abschneiden 
var #dt(b",") 
   denn hinter dem Komma beginnt das Datum: #dt hat die Form   Thu, 17. Mar 2005 

Beispiel 3:
Ziel: aktuelles Datum in deutscher Form:  "Do, 17. Mrz 2005"  in der iV bereitstellen 
var #dts 
Day
var (b"= ") 

?insert=h xinsert 
?Register=h xa 
?Kalendersätze=h xkalend 
?holidays.flx=h holidays.flx 
?weekday.flx=h weekday.flx 
?ostertag.flx=h ostertag.flx 
?kirchlichen Feiertage=X holidays 0 
?leapyear.flx=h leapyear.flx 
?gauss.flx=h gauss.flx 
?Kalenderfunktion=h kalender 
?Rechnens.=h xiz 
?Ausprobieren=x date8`ins #uad`var #uad(6,2) "-" #uad(4,2) "-" #uad(0,4)`mes 
?kalend=h xkalend 
?a-kalend.flx=h a-kalend.flx