Hallo Forum,
ich versuche nun schon länger verzweifelt, mir aus einem Kalender mit der get_events Funktion Events für einen bestimmten Zeitraum zu laden, leider erfolglos

Egal was ich probiere, es wird immer ein leeres Array zurückgegeben.
Ich denke, der Funktionsaufruf ist korrekt (ansonsten würde ja auch kein Array zurückgegeben, oder?):
PHP-Code:
$startzeit = time()-86400*30;
$endezeit = time()+86400*60;
$events = get_events($calendar, $startzeit, $endezeit, 1, 0);
Es ist nur ein Kalender definiert, daher ist $calender bei mir 1.
Der Aufruf der Funktion get_birthdays() funktioniert im gleichen Script ohne Probleme.
Habe ich noch einen Denkfehler oder ist die Funktion kaputt, so dass ich über eine Datenbankabfrage gehen müsste (was ich gerne vermeiden wollte).
Danke für die Denkanstöße.
Gruß Rainer
Von welcher Seite und von welcher Stelle willst du diese Funktion aufrufen?
Sind dort mit require/include ....php alle nötigen PHP-Dateien eingebunden, z.B.:
require_once MYBB_ROOT."inc/functions_calendar.php";
In dieser befindet sich die Funktion get_events().
[ETS]
... aufgerufen wird eine eigene ical.php Datei im Unterverzeichnis scripts. Der require_once ist eingefügt. Wie ich schon schrieb, funktioniert ja die get_birthdays() Funktion ohne Probleme. Die sitzt, soweit ich das verstanden habe, doch auch in der functions_calendar.php.
Und vom Verständnis her würde ich sagen, wenn mir ein leeres Array zurückgegeben wird, dann ist der Aufruf doch an sich erfolgreich gewesen, oder?
Habe mir jetzt eine andere Lösung mit direktem Datenbankzugriff überlegt. Trotzdem wäre es ja schön zu wissen, wo mein Fehler liegt.
Danke für die Denkanstöße.
Ist die Variable $calendar wirklich mit der korrekten ID belegt?
Auch bei nur einem einzigen Kalender muss sie nicht zwingend 1 sein.
[ETS]
Da bin ich mir eigentlich sicher, da ich mit der gleichen cid vorher eine Datenbankabfrage mache, um den Namen des Kalenders zu holen. Dieser wird richtig zurückgegeben.
(30.04.2025, 18:42)dora71 schrieb: [ -> ]Da bin ich mir eigentlich sicher, da ich mit der gleichen cid vorher eine Datenbankabfrage mache, um den Namen des Kalenders zu holen. Dieser wird richtig zurückgegeben.
Hallo Rainer,
dein Funktionsaufruf sieht auf den ersten Blick korrekt aus:
Code:
$startzeit = time() - 86400 * 30;
$endezeit = time() + 86400 * 60;
$events = get_events(1, $startzeit, $endezeit, 1, 0);
Trotzdem gibt get_events() oft ein leeres Array zurück, wenn bestimmte Bedingungen nicht erfüllt sind.
Hier ein paar Punkte zum Prüfen:
Zitat:1. Gibt es überhaupt sichtbare Events im Kalender?
Stelle sicher, dass im Kalender Einträge vorhanden sind, die:
- dem Kalender cid = 1 zugewiesen sind,
- auf sichtbar gesetzt sind (visible = 1),
- ein korrekt gesetztes Startdatum und -zeit haben.
Zitat:2. Haben die Events auch eine Zeitangabe?
Wenn beim Anlegen des Events keine Uhrzeit angegeben wurde, wird starttime evtl. als 0 gespeichert – dann greift dein Zeitfilter nicht.
Erstelle testweise ein Event mit Startdatum und Uhrzeit.
Zitat:3. Funktioniert es mit direkter SQL-Abfrage?
Falls nötig, teste mal folgendes:
Code:
global $db;
$start = time() - 86400 * 30;
$end = time() + 86400 * 60;
$query = $db->simple_select("events", "*", "starttime >= '{$start}' AND starttime <= '{$end}' AND cid = 1 AND visible = 1");
$events = [];
while($event = $db->fetch_array($query)) {
$events[] = $event;
}
Damit bekommst du alle sichtbaren Events im Zeitraum direkt aus der Datenbank.
Wahrscheinlich ist starttime bei deinen Events nicht gesetzt oder auf 0.
Sobald ein Event mit konkretem Datum
und Uhrzeit existiert, sollte get_events() wie erwartet funktionieren.
Viele Grüße
ladyd – SOS Informatica
Einer so wie ich , Ohne Programmierkenntnisse, hat mal dass gelesen.
Zitat : von
HIER
Ein Tag hat nicht 86.400 Sekunden!
So berechnen Sie Datumsangaben in PHP nicht, um tragische Folgen zu vermeiden.