So schwer solle das eigentlich nicht sein. Arbeite mit relativer Positionierung. Definiere dabei zum Beispiel einen Tag als 20 Pixel hoch.
Anschließend liest du die Einträge aus der Datenbank aus und ordnest sie nach dem frühesten Gültigkeitsdatum. Gleichzeitig liest du in deinem Query bereits die Länge eines Eintrages aus (von_Datum - bis_Datum + 1) wodurch du gleichzeitig deine Höheninformation bekommst.
Wenn dein Eintrag zum Beispiel von 15.6 bis zum 10.6 gültig ist brauchst du die Information 15.6 und 6 Tage Gültigkeit. Du erstellst also eine Box, (15.6 ist dein frühestest Datum) die mit den Styleeigenschaften margin-top:0 und height: 120px ausgestattet wird. (5 Tage * 20 Pixel pro Tag). Wenn du die Kästen nun richtig floaten lässt, dürfte sich eine Box mit entsprechend hohem Rand für deine Zwecke selbst positionieren.
Ich hoffe mein Ansatz ist verständlich. Wenn du damit nicht weiterkommst, dann sieh dir die Kalenderfunktionen in zum Beispiel GroupWare-Systemen an. Die Funktionieren ähnlich.
Grüße.