Lade...
 

CX_SPAN_DATE::Encompassed

CX_SPAN_DATE::Encompassed

Beschreibung:

Diese Funktion überprüft, ob sich eine Datumsperiode vollständig in einem anderen befindet. Ist die Bedingung erfüllt, so wird der Wahrheitswert "1" geliefert, ansonsten "0".
Hierbei wird ein einfaches Datum wie eine Datumsperiode der Länge 1 Tag behandelt, die am Tagesdatum beginnt und endet.
Für periodisches Datum wird die Mengentheoretische Teilmengen-Relation geprüft. Alle Tage der jeweiligen Objekte werden also als Menge der Tage, die sie umfassen, betrachten.
Diese Mengenbetrachtung kann auch zu (halb-)unbeschränkten Mengen führen, z.B. bei einer Datumsperiode des Typs FROM, bei dem ein Beginn fehlt. Unten sind die so auftretenden Kombinationen von Datumsperioden tabellarisch aufgeführt.

Code-Beispiel:

In dem Beispiel-Programm wird geprüft, ob der "2.10.1990" in der Datumsperiode "Vom 3.10.1990 bis zum 5.10.1990" enthalten ist.

Var(date, sdate)                          // deklariere Variable
CreateTransObject(CX_DATE) -> date        // erzeuge die Tagesdaten
CreateTransObject(CX_SPAN_DATE) -> sdate  // erzeuge eine Datumsperiode
"3.10.1990" sdate Put                     // setze das Startdatum der Periode
"5.10.1990" date Put                      // setze die Tagesdaten
date sdate Call(SetEndOfPeriod)           // setze das Enddatum der Periode
"2.10.1990" date Put
sdate date Call(Encompassed)              // prüfe, ob das Tagesdatum enthalten ist

Das Ausführen dieses Skriptes erzeugt den Wert "0", da das Tagesdatum nicht in der Datumsperiode enthalten ist. 

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_DATE, CX_SPAN_DATE oder CX_PERIODIC_DATE das Datum(-sobjekt)
  Top-1 CX_DATE, CX_SPAN_DATE oder CX_PERIODIC_DATE das andere Datum(-sobjekt)
Stack(Out) Top INTEGER Das Prüfungsergebnis
Funktionsaufruf: Call(Encompassed)

Abschließend zeigt die folgende Tabelle alle möglichen Kombinationen von zwei Datumsperioden, die auftreten können. Dabei stellen start1 und end1 die Datumsperiode dar, für die der Vergleich aufgerufen wird, und start2 und end2 die Datumsperiode, die verglichen wird. Diese sind bei jeder Datumsperiode durch die Funktionen RealStartOfPeriod und RealEndOfPeriod zu ermitteln.Eventuell auftretende nicht positive Periodenlänge (z.B. durch verdrehen von Start und Ende) spielt also keine Rolle.

Ist Start- oder End-Datum einer Datumsperiode gegeben, so ist das jeweilige Feld durch einen '*' gekennzeichnet. Bei einem Eintrag 'unendlich' fehlt die jeweilige Grenze.
Ist die Bedingung in jedem Fall erfüllt, so wird dieses durch TRUE gekennzeichnet. Ist sie in jedem Fall nicht erfüllt steht statt der Bedingung der Wert FALSE.

start1 end1 start2 end2 für ein Enthaltensein zu erfüllende Bedingung
* * * * start1 >= start2 und end1 <= end2
* * * unendlich start1 >= start2
* * unendlich * end1 <= end2
* * unendlich unendlich TRUE
* unendlich * * FALSE
* unendlich * unendlich start1 >= start2
* unendlich unendlich * FALSE
* unendlich unendlich unendlich TRUE
unendlich * * * FALSE
unendlich * * unendlich FALSE
unendlich * unendlich * end1 <= end2
unendlich * unendlich unendlich TRUE
unendlich unendlich * * FALSE
unendlich unendlich * unendlich FALSE
unendlich unendlich unendlich * FALSE
unendlich unendlich unendlich unendlich TRUE