phpbar.de logo

Mailinglisten-Archive

[php] Zeitkontrolle

[php] Zeitkontrolle

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Fre Okt 7 23:27:13 CEST 2005


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