Php ical文件重复事件
我创建了一个PHP脚本来从邮件服务器读取ical文件。这个脚本用于计划我的PBX中的事件,所以当人们打电话而我不在办公室时,它会自动将他们重定向到语音邮件。这对一次性事件非常有效,但我希望它对重复事件有效 这是脚本的结果:Php ical文件重复事件,php,icalendar,Php,Icalendar,我创建了一个PHP脚本来从邮件服务器读取ical文件。这个脚本用于计划我的PBX中的事件,所以当人们打电话而我不在办公室时,它会自动将他们重定向到语音邮件。这对一次性事件非常有效,但我希望它对重复事件有效 这是脚本的结果: [BEGIN] => VEVENT [DTSTAMP] => 20170920T120736Z [UID] => 80462778A326E04EBD831336D01F2A2F179EBCBCC8BD7A45954DE9CF [DESCRIPTION] =
[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。特别是因为我的ical文件已经有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";
}
您需要自己编写其余的代码,但这会产生一系列彼此间隔一周的日期
看到它在这里工作了吗这确实很有效,但是发生在52周以上的事件呢?我不能继续循环,因为最终它将不得不连续循环数年。