我在从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
因此,这是将事件输出到可以在Android或iOS设备中点击并添加到日历中的URL。下一步是在需要时更新事件项。我一直试图用这样的东西(最初的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取消它们:如果需要,可以取消。
感谢。
答案 0 :(得分:2)
你想要做的事情是不可能的。
您可能应该做的是创建iCalendar Feed。 (通常使用webcal://
非标准URI架构)。
这样的Feed应该只有METHOD:PUBLISH
并且始终包含日历中的每个项目。
要更新此Feed中的条目,您只需更新Feed本身即可。您在此Feed中删除的所有项目都将从日历中删除。
METHOD:CANCEL
和METHOD:REQUEST
是其他未在此上下文中使用的iTip方法。它们有两个主要用途:
这些方法仅对具有ORGANIZER
和ATTENDEE
s的iCalendar事件具有意义