2017-09-22 20 views
0

Ich habe ein PHP-Skript erstellt, um eine ical-Datei von meinem Mailserver zu lesen. Dieses Skript wird verwendet, um Ereignisse in meiner PBX zu planen. Wenn Leute anrufen und ich nicht im Büro bin, leitet sie sie automatisch zur Voicemail um. Dies funktioniert perfekt für einmalige Ereignisse, aber ich möchte, dass es für wiederkehrende Ereignisse funktioniert.ical Datei wiederkehrende Ereignisse

Dies ist das Ergebnis des Skripts:

[BEGIN] => VEVENT 
[DTSTAMP] => 20170920T120736Z 
[UID] => 80462778A326E04EBD831336D01F2A2F179EBCBCC8BD7A45954DE9CF 
[DESCRIPTION] => \n 
[PRIORITY] => 5 
[SUMMARY] => Summary 
[CLASS] => PUBLIC 
[LOCATION] => Place 
[X-ALARM-TRIGGER] => -PT30M 
[DTSTART] => 20170912T083000 
[DTEND] => 20170912T173000 
[RRULE] => FREQ=WEEKLY;BYDAY=TU 
[END] => VEVENT 

ich ein wiederkehrendes Ereignis von den „RRULE“ Parametern erkennen kann, aber es durch das Skript denken würde den wiederkehrenden Zeitpunkt zu berechnen, und das wäre ein nehmen viel CPU, denke ich. Zumal meine ical Datei bereits über 1800 Ereignisse hat und diese alle überprüft werden müssten. Dann gibt es auch die Frage, wie dies zu überprüfen ist, da wiederkehrende Ereignisse täglich, wöchentlich, monatlich, jährlich sein können, und das heißt ohne Intervalle, z. jede andere Woche.

Irgendeine Idee, wie man das macht?

Antwort

1

so etwas wie dieses Etwas

<?php 

$recur = 'FREQ=WEEKLY;BYDAY=TU'; 
$ex = explode(';', $recur); 
$freq = str_replace('FREQ=','',$ex[0]); 
$day = str_replace('BYDAY=','',$ex[1]); 

$dates = []; 

switch ($freq) { 
    case 'WEEKLY': 
     $date = new DateTime(); // set to correct day obvs 
     $dates[] = $date; 
     for ($x = 0; $x <= 52; $x ++) { 
      $date = clone $date; 
      $date->modify('+1 week'); 
      $dates[] = $date; 
     } 
     break; 
} 

foreach($dates as $date) { 
    echo $date->format('Y-m-d')."\n"; 
} 

Sie müssen versuchen, den Rest selbst, kodieren, aber dies erzeugt eine Reihe von Terminen voneinander Abstand von einer Woche.

es Siehe, hier zu arbeiten https://3v4l.org/Dgriv

+0

, die tatsächlich funktioniert gut, aber was über Ereignisse, die für mehr als 52 Wochen auftreten? Ich kann den Loop nicht mehr schleifen, weil er irgendwann jahrelang durchgehen müsste. – vespino

Verwandte Themen