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