Mailinglisten-Archive |
Hallo Norbert,
Norbert Pfeiffer schrieb:
> in einem Formular werden Zeiten erfasst:
> Person, Datum, Anfang, Ende
>
> Nun moechte ich irgendwie absichern, dass sich Zeitraeume
> nicht ueberschneiden, also innerhalb von einer Person und
> am gleichen Tag. Wobei prinzipiell sehr viele Datensaetze
> von einem Person.Tag auftreten koennen und somit jeder
> neue Eintrag gegengeprueft werden muss.
>
> Leider stehe ich aber gerade auf dem Schlauch ...
theoretisch gibt es neun Überschneidungsmöglichkeiten, wenn ich mich nicht
verrechnet habe:
1.-3.:
Die Startzeit eines neuen Zeitraums entspricht genau der Startzeit eines
vorhandenen Eintrags, die Endzeit des Zeitraums liegt 1. vor, 2. genau auf
oder 3. hinter der Endzeit des Eintrags.
4.+5.:
Die Endzeit eines neuen Zeitraums entspricht genau der Endzeit eines
vorhandenen Eintrags, die Startzeit des Zeitraums liegt 4. vor oder 5.
hinter der Startzeit des Eintrags.
6.+7.:
Die 6. Start- oder 7. Endzeit eines neuen Zeitraums liegt innerhalb eines
vorhandenen Eintrags, die andere Zeit außerhalb.
8.+9.:
Die Start- und die Endzeit eines neuen Zeitraums liegen beide 8. inner-
oder 9. außerhalb eines vorhandenen Eintrags.
Folgende Prüfungen müßtest Du durchführen:
a)
Entspricht die Startzeit des neuen Zeitraums genau der Startzeit eines
vorhandenen Eintrags?
-> deckt die Fälle 1.-3. ab
b)
Liegt die Startzeit des neuen Zeitraums genau zwischen der Start- und
Endzeit eines vorhandenen Eintrags?
-> deckt die Fälle ab 5., 6. und 8. ab
c)
Liegt die Startzeit eines vorhandenen Eintrags genau zwischen der Start-
und Endzeit des neuen Zeitraums?
-> deckt die Fälle 4., 7. und 9. ab
Zur besseren Verständlichkeit habe ich das einmal in einer Tabelle
visualisiert:
+---+---+---+---+---+---+
+ + A + + + B + +
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + a + + b + + + a=A + + + + +
b->(A, B) +
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + a + + + b + + a=A + + + b=B + +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + a + + + + b + a=A + + + + B->(a, b) +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + + a + b + + + + a->(A, B) + + + +
b->(A, B) +
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + + a + + b + + + a->(A, B) + + b=B + +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ + + a + + + b + + a->(A, B) + + + B->(a, b) +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ a + + + b + + + + + A->(a, b) + + +
b->(A, B) +
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ a + + + + b + + + + A->(a, b) + b=B + +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
+ a + + + + + b + + + A->(a, b) + + B->(a, b) +
+
+---+---+---+---+---+---+-----+-----------+-----------+-----+-----------+-----------+
Ich hoffe, die Tabelle kommt einigermaßen heil an. Wenn Du Dir die Tabelle
z.B. mit der Schriftart Courier anguckst, wird sie umgehend verständlicher
- sofern durch den Mailversand nicht noch zusätzliche Zeilenumbrüche
hinzugekommen sind. :-) (Eine Schreibweise wie a->(A, B) bedeutet, a liegt
zwischen A und B.)
Das einzige Problem, welches Du noch lösen mußt, ist die Frage, wie Du
eine Überschreidung definierst? Ist z.B. folgendes erlaubt:
1. Zeit: 9:15-9:30
2. Zeit: 9:30-9:45
Oder gilt das als Überschneidung? Wenn ja, müßtest Du halt die oben
genannten Prüfungen um einen Zeitversatz erweitern. :-)
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive