我在从PHP生成的.ics文件中获取条目以进行更新时遇到了很多问题。下面是我使用的一个例子:
<?php
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=calendar.ics');
$time = time();
$dtstamp = date('Ymd', $time). 'T' . date('His', $time) . 'Z'; echo "'r'n";
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:ABC123
DTSTART:20150601T120000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:DEF123
DTSTART:20150601T160000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
END:VCALENDAR
因此,这是将事件输出到一个URL,该URL可以在Android或iOS设备中点击并添加到日历中。下一步是在需要时更新事件项。我一直在尝试用这样的东西来做(最初的PHP故意省略):
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:ABC123
DTSTART:20150601T123000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:DEF123
DTSTART:20150601T163000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
END:VCALENDAR
因为DTSTAMP总是大于前一个条目,所以序列已经增加,METHOD更改为REQUEST,据我所知,这应该足够了。
然而,在Android中,它只是再次添加事件,在iOS中,它显示已经存在的事件以及以前的详细信息,并且只允许您选择再次添加事件。所以,我想知道需要什么才能更新现有的事件,然后使用METHOD:cancel(如果需要)取消它们。
谢谢。
您想要做的事情是不可能的。
你可能应该做的是创建一个iCalendar提要。(通常使用webcal://
非标准URI模式)。
像这样的提要应该只有METHOD:PUBLISH
,并且总是包含日历中的每个项目。
要更新此提要中的条目,只需更新提要本身。您在此订阅源中删除的任何项目都将从日历中删除。
CCD_ 3和CCD_。它们有两个主要用途:
- 电子邮件邀请(又称iMip)
- CalDAV调度
这些方法只对具有ORGANIZER
和ATTENDEE
的的iCalendar事件有意义