【发布时间】:2014-09-11 20:49:09
【问题描述】:
我对生成的 iCal 文件有疑问。
它似乎正确地生成了代码,并且 .ics 文件加载了多个事件,但是当我在 Outlook 中打开该文件时,它只会将第一个事件导入我的日历,其余的不会添加。
这是生成的 iCal 文件
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-CALNAME: Calendar
CALSCALE:GREGORIAN
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:BST
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:GMT
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20140906T090000
DTEND:20140906T170000
UID:224
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject\, meet our admissions tutors\,
URL;VALUE=URI:http://www.domain.com/events-224
SUMMARY:Open Day (undergraduate)
END:VEVENT
BEGIN:VEVENT
DTSTART:20141208T000000
DTEND:20141212T000000
UID:416
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-416
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20141215T000000
DTEND:20141218T000000
UID:417
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-417
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20150112T000000
DTEND:20150116T000000
UID:419
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-419
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20150314T000000
DTEND:20150314T000000
UID:67
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject and meet our admissions tutors.
URL;VALUE=URI:http://www.domain.com/events-67
SUMMARY:Admissions Open Day (Arts)
END:VEVENT
BEGIN:VEVENT
DTSTART:20150425T000000
DTEND:20150425T000000
UID:73
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject and meet our admissions tutors.
URL;VALUE=URI:http://www.domain.com/events-73
SUMMARY:Admissions Open Day (Sciences)
END:VEVENT
END:VCALENDAR
以下是设置iCal文件页眉页脚的变量
$iCalHeader = "" .
"BEGIN:VCALENDAR\n" .
"PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN\n" .
"VERSION:2.0\n" .
"METHOD:PUBLISH\n";
$iCalHeaderBottom = "CALSCALE:GREGORIAN\n" .
"X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n" .
"BEGIN:VTIMEZONE\n" .
"TZID:Europe/London\n" .
"BEGIN:DAYLIGHT\n" .
"TZOFFSETFROM:+0000\n" .
"TZOFFSETTO:+0100\n" .
"DTSTART:19810329T010000\n" .
"RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\n" .
"TZNAME:BST\n" .
"END:DAYLIGHT\n" .
"BEGIN:STANDARD\n" .
"TZOFFSETFROM:+0100\n" .
"TZOFFSETTO:+0000\n" .
"DTSTART:19961027T020000\n" .
"RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\n" .
"TZNAME:GMT\n" .
"END:STANDARD\n" .
"END:VTIMEZONE\n";
$iCalFooter = "END:VCALENDAR";
最后是生成事件的代码
$iCal .= "BEGIN:VEVENT\n".
"DTSTART:" . date('Ymd\THis', strtotime($row2["EVENT_StartDateTime"])) ."\n".
"DTEND:" . date('Ymd\THis', strtotime($row2["EVENT_EndDateTime"])) . "\n".
"UID:" . $row2["EVENT_ID"] . "\n".
"DTSTAMP:" . date('Ymd\THis', time()) . "\n".
"LOCATION:$address\n".
"DESCRIPTION:" . $this->escapeString($description) . "\n".
"URL;VALUE=URI:http://www.domain.com/events-" . $row2["EVENT_ID"] . "\n".
"SUMMARY:" . $this->escapeString($title) . "\n".
"END:VEVENT\n";
它适用于第一个事件,所以我认为为每个事件生成的代码没有问题,我做了一些研究,但似乎找不到解决方案,是否有额外的声明需要在每个事件之间使用吗?
或者也许 Outlook 不支持单个 iCal 中的多个事件,因此只导入第一个?
任何帮助或建议将不胜感激。
提前致谢。
【问题讨论】: