Kalender konnte nicht geladen werden.'; return; } // Termine parsen function parse_ics($ics) { $lines = explode("\n", $ics); $events = []; $event = []; $inEvent = false; foreach ($lines as $line) { $line = trim($line); if ($line === 'BEGIN:VEVENT') { $inEvent = true; $event = []; } elseif ($line === 'END:VEVENT') { $inEvent = false; $events[] = $event; } elseif ($inEvent) { // Property kann Parameter enthalten, z.B. DTSTART;TZID=Europe/Berlin:20240701T19000000 $parts = explode(':', $line, 2); if (count($parts) === 2) { $key = $parts[0]; $val = $parts[1]; // Nur den eigentlichen Property-Namen extrahieren $key = strtoupper(preg_replace('/;.+$/', '', $key)); $event[$key] = $val; } } } return $events; } function format_ics_date($date) { // Unterstützt sowohl ganztägige als auch Zeitangaben if (strpos($date, 'T') !== false) { $dt = DateTime::createFromFormat('Ymd\THis', substr($date, 0, 15)); return $dt ? $dt->format('d.m.Y H:i') : $date; } else { $dt = DateTime::createFromFormat('Ymd', $date); return $dt ? $dt->format('d.m.Y') : $date; } } $events = parse_ics($ics); // Nur Events mit DTSTART berücksichtigen $events = array_filter($events, function($event) { return isset($event['DTSTART']) && !empty($event['DTSTART']); }); // Nach Datum sortieren usort($events, function($a, $b) { return strcmp($a['DTSTART'], $b['DTSTART']); }); // Aktuelles Datum $today = (new DateTime())->format('Ymd'); // Nur zukünftige Termine anzeigen $future_events = array_filter($events, function($event) use ($today) { return isset($event['DTSTART']) && $event['DTSTART'] >= $today; }); ?>
Keine bevorstehenden Termine gefunden.
Datum Uhrzeit Titel Ort Beschreibung