phpbar.de logo

Mailinglisten-Archive

[php] Zeitkontrolle

[php] Zeitkontrolle

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Sam Okt 8 21:56:39 CEST 2005


Hallo Norbert,

Lutz Zetzsche schrieb:
> theoretisch gibt es neun Überschneidungsmöglichkeiten, wenn ich mich nicht
> verrechnet habe:

den ganzen Tag hat mich noch etwas gestört... Gerade bin ich darauf
gekommen, was... Ich habe zwei Möglichkeiten vergessen! ;-) Es sind also
insgesamt 11:


> 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.

10.:
Die Startzeit des neuen Zeitraums entspricht genau der Endzeit eines
vorhandenen Eintrags.

11.:
Die Endzeit des neuen Zeitraums entspricht genau der Startzeit 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

Die erforderlichen Prüfungen für alle 11 Fälle, die mir eingefallen sind
;-), lassen sich damit aus meiner Sicht insgesamt wie folgt
zusammenfassen:

WHERE (Startzeit1 BETWEEN Startzeit2 AND Endzeit2)
   OR (Startzeit2 BETWEEN Startzeit1 AND Endzeit1)

Was gleichbedeutend ist mit:

WHERE (Startzeit1 >= Startzeit2 AND Startzeit1 <= Endzeit2)
   OR (Startzeit2 >= Startzeit1 AND Startzeit2 <= Endzeit1)

Eine verblüffend einfache und verständliche Lösung, wenn man den Wust von
Möglichkeiten betrachtet, die es gibt. :-)


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive