Lade...
 

CX_DATE::Overlap

CX_DATE::Overlap

Beschreibung:

Diese Funktion überprüft, ob sich ein Tagesdatum oder eine andere Datumsperiode mit der Datumsperiode überschneidet. Ist die Bedingung erfüllt, so wird der Wahrheitswert "1" geliefert, ansonsten "0".

Diese Funktion überprüft, ob sich eine Datumsperiode mit einer anderen überschneidet. 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 Schnittmengen-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 sich die Datumsperioden "Vom 2.10.1990 bis zum 4.10.1990" und "Vom 3.10.1990 bis zum 5.10.1990" überschneiden.

Var(date, sdate1, sdate2)                 // deklariere Variable
CreateTransObject(CX_DATE) -> date        // erzeuge das Tagesdatum
CreateTransObject(CX_SPAN_DATE) -> sdate1 // erzeuge die Datumsperioden
CreateTransObject(CX_SPAN_DATE) -> sdate2
"2.10.1990" sdate1 Put                    // setze das Startdaten der Perioden
"3.10.1990" sdate2 Put
"4.10.1990" date Put                      // setze die Enddaten der Perioden
date sdate1 Call(SetEndOfPeriod)
"5.10.1990" date Put
date sdate2 Call(SetEndOfPeriod)
sdate2 sdate1 Call(Overlap)               // prüfe, ob sich die Datumsperioden überlappen

Das Ausführen dieses Skriptes erzeugt den Wert "1", da sich die beiden Perioden überlappen. 

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

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 start1 <= end2 oder
end1 >= start2 und end1 <= end2 oder
start1 <= start2 und end2 <= end1
* * * unendlich end1 >= start2
* * unendlich * start1 <= end2
* * unendlich unendlich TRUE
* unendlich * * start1 <= end2
* unendlich * unendlich TRUE2
* unendlich unendlich * end2 >= start1
* unendlich unendlich unendlich TRUE
unendlich * * * end1 >= start2
unendlich * * unendlich end1 >= start2
unendlich * unendlich * TRUE
unendlich * unendlich unendlich TRUE
unendlich unendlich * * TRUE
unendlich unendlich * unendlich TRUE
unendlich unendlich unendlich * TRUE
unendlich unendlich unendlich unendlich TRUE