(Web-) Design und webbasierte SprachenTipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...
Webradio Streamplan
Diskussion: Webradio Streamplan im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Hallo zusammen,
ich habe aktuell nun ein etwas größeres Projekt am Laufen und befinde mich vermutlich in einer gedanklichen ...
ich habe aktuell nun ein etwas größeres Projekt am Laufen und befinde mich vermutlich in einer gedanklichen Einbahnstraße.
Ich habe gestern einen dynamischen Streamplan aufgebaut, der mir für die aktuelle Woche jeweils alle Stunden (jeweils in 15 Minuten-Schritten) anzeigt.
Dies funltioniert auch soweit, mit folgendem Code:
PHP-Code
PHP-Code:
// Wie viel Minuten soll eine Einheit (Tabellenzelle) haben $minutes = 15; $cellsperhr = (60/$minutes);
// Aktuelle Einheit der Stunde $currentquarter = ceil(date("i", time())/$minutes);
// Interval $interval = 1;
// Tage der aktuellen Woche $weekdays = $common->getDaysInWeek(date("W", time()), date("YY", time()));
// Datum der Tage $datesinweek = array(); foreach($weekdays as $day){ array_push($datesinweek, date("d.m.Y", time()+$day)); }
foreach($datesinweek as $day){ $currinterval = 0; // Prüfen ob der aktuelle Tag heute ist $today = ($day == date("d.m.Y", time()) ? 'today' : 'other');
Das Ergebnis sieht dann in etwa so aus (siehe Anhang).
Nun habe ich aber folgendes Problem.
Die Shows können in dem besagten Interval (alle 15 Minuten) enden oder anfangen.
Jedoch gibt er mir immer nur für jede Stunde alle aus.
Beispiel: Disane hat eine Show am Sonntag (letzte Spalte) von 20.00-22.15 eingetragen, die Show wird aber bis 23 Uhr eingetragen.
Habt ihr da eventuell eine Lösung, oder Verbesserungsvorschläge?
Aktuell weiß ich echt nicht mehr weiter.
Schon dumm, wenn man seinen eigenen Quellcode nicht mehr blickt .
Die Datenbank-Tabelle der Shows, ist im Anhang aufgeschlüsselt mit entsprechenden Spalten.
Über jede Hilfe wäre ich echt dankbar!
Liebe Grüße
- reaL-Insanity
EDIT:
Auch nach Umbauen etc. bekomm ich es zum Verrecken nicht hin.
Vermutlich habe ich wirklich einen echt krassen Logikfehler da drin.
Du prüfst nämlich nur, ob die Show in der Aktuellen Stund estattfindet. Du zählst ja bereits die Viertelstunden in $i hoch - fasst aber $i seitdem nichtmehr an. In dem ganzen Script sehe ich, dass du nur auf volle Stunden prüfst. Auch in der for-schleife schaust du nur, ob die Show in der Aktuellen Stunde stattfindet. Aber nicht, ob sie auch in der aktuellen Viertelstunde noch läuft (in_array($hr, $showhrs))
Also ich habs mal nun umgebaut. Vorher stell ich mir eine "Matrix" zusammen in der alle Tage der Woche, alle Stunden bzw. halbe Stunden (einstellbar) ein false oder ein Shownamen haben (sofern sie einen beinhalten).
Wie mir aufgefallen ist, dürfte PHP eigentlich nur die ersten beiden 1/2 std. markieren da die Show von 00:00 - 01:00 geht (Show CJJ).
Jedoch wird auch Zeit praktisch von 01:00 - 01:30 uhr als Show markiert.
Irgendwo, in der Ermittlung der Matrix, habe ich wohl noch einen Fatzer drin, den ich unter Umständen nicht bedacht habe.
Achja, mit folgendem Statement hole ich mir die Daten aus der Tabelle:
Code:
SELECT
s.Title, g.Name AS Genre,
s.ID AS ShowID,
u.ID AS UserID,
u.Name AS UserName,
c.Countryname,
s.Description AS ShowDescription,
s.StartDatetime,
s.EndDatetime,date_format(s.StartDateTime, '%H') AS StartHour,
date_format(s.StartDateTime, '%i') AS StartMinutes,
TIMESTAMPDIFF(MINUTE, s.StartDateTime, s.EndDateTime) as TimeDifference,
date_format(s.EndDateTime, '%H') AS EndHour,
date_format(s.EndDateTime, '%i') AS EndMinutes
FROM shows s
INNER JOIN genre g ON g.ID = s.FK_Genre_ID
LEFT JOIN users u ON u.ID = s.FK_User_ID
LEFT OUTER JOIN pictures p ON p.ID = s.FK_Picture_ID
LEFT OUTER JOIN countries c ON u.FK_Country_ID = c.ID
WHERE
(DATE_FORMAT(s.StartDateTime, '%e.%c.%Y') = '{0}') AND '{1}'
BETWEEN DATE_FORMAT(s.StartDateTime, '%H:%i') AND DATE_FORMAT(s.EndDateTime, '%H:%i')
ORDER BY s.StartDatetime, s.EndDatetime
ich habe mal kurz drübergeschaut, und vermute den Fehler in der Ausgabe.
Es ist mehr eine Vermutung. Aber ich hätte da noch ein paar kleine Fragen:
* $minutes (in der Ausgabe) nimmst du wo her?
* Was machst du mit der daraus errechneten $nexttime?
* Wieso tust du dir das mit der Stringbearbeitung an? String erzeugen, zerlegen, anders wieder zusammensetzten. Für eine Aufgabe, die sich doch eigentlich auch mit Timestamps realisieren lassen müsste?
Ich habe den Fehler schon gefunden... total simpel eigentlich.
Lösung:
Die User legen ihre Shows praktisch immer in dem Format an:
12.00 - 12.30 etc.
In dem SQL-Statement habe ich, in dem BETWEEN, immer wieder bis 12.30 geprüft. Was aber falsch ist, da die Show prinzipiell nur bis 12.29 geht und ab 12.30 eine andere Show anfängt.
Die Lösung ist nun diese, dass ich von der Endzeit eine Minute abziehe:
Code:
SELECT
s.Title,
g.Name AS Genre,
s.ID AS ShowID,
u.ID AS UserID,
u.Name AS UserName,
c.Countryname,
s.Description AS ShowDescription,
s.StartDatetime,
s.EndDatetime,
date_format(s.StartDateTime, '%H') AS StartHour,
date_format(s.StartDateTime, '%i') AS StartMinutes,
TIMESTAMPDIFF(MINUTE, s.StartDateTime, s.EndDateTime) as TimeDifference,
date_format(s.EndDateTime, '%H') AS EndHour, date_format(s.EndDateTime, '%i') AS EndMinutes
FROM
shows s
INNER JOIN genre g ON g.ID = s.FK_Genre_ID
LEFT JOIN users u ON u.ID = s.FK_User_ID
LEFT OUTER JOIN pictures p ON p.ID = s.FK_Picture_ID
LEFT OUTER JOIN countries c ON u.FK_Country_ID = c.ID
WHERE
(DATE_FORMAT(s.StartDateTime, '%e.%c.%Y') = '{0}') AND
'{1}' BETWEEN DATE_FORMAT(s.StartDateTime, '%H:%i') AND DATE_FORMAT(DATE_ADD(s.EndDateTime, INTERVAL -1 MINUTE), '%H:%i')
ORDER BY s.StartDatetime, s.EndDatetime