文件重复活动

时间:2017-09-22 09:52:29

标签: php icalendar

我创建了一个PHP脚本来从我的邮件服务器中读取一个文件。此脚本用于计划我的PBX中的事件,因此当人们呼叫并且我不在办公室时,它会自动将它们重定向到语音邮件。这适用于一次性事件,但我希望它适用于重复发生的事件。

这是脚本的结果:

[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

我可以通过“RRULE”参数识别重复发生的事件,但是通过脚本来考虑它将不得不计算重复日期,这会占用大量的CPU。特别是因为我的ics文件已经有超过1800个事件,所有这些都必须进行检查。然后还有关于如何检查这个的问题,因为重复发生的事件可以是每天,每周,每月,每年,并且没有间隔,例如,每隔一周。

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:1)

尝试这样的东西

<?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";
}

你需要自己编写其余的代码,但这会产生一堆相隔一周的日期。

在此处查看https://3v4l.org/Dgriv