format('d.m.Y H:i') : $date; } else { $dt = DateTime::createFromFormat('Ymd', $date); return $dt ? $dt->format('d.m.Y') : $date; } } // ICS-Datei laden $ics = @file_get_contents(CAL_URL); if ( ! $ics) { echo '
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; } $events = parse_ics($ics); return function() use ($events) { return $events; } ?>