ical file recurring events
问题描述:
我已经创建了一个PHP脚本来从我的邮件服务器读取一个文件。该脚本用于规划我的PBX中的事件,因此当人们打电话而我不在办公室时,它会自动将它们重定向到语音邮件。这适用于一次性事件,但我希望它适用于重复性事件。ical file recurring events
这是脚本的结果:
[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。特别是因为我的文件已经有超过1800个事件,这些都必须检查。然后还有如何检查这个问题,因为经常性事件可以是每天,每周,每月,每年,而且没有间隔,例如,每隔一周。
关于如何去做这件事的任何想法?
答
给这样的一个尝试
<?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
,实际工作很好,但是如果是超过52星期里发生的事件?我无法循环循环,因为最终它将不得不循环多年。 – vespino