全天活动开始于 +01:00

ical allday events starts at +01:00

我正在尝试使用 php 将日历从我的数据库导出到 ical 文件。

它工作正常,除了一件事:所有事件都设置为在 01:00 而不是 00:00 开始。它可能与winter/summertime有关。我设置了时区(将开始时间从 02:00 更改为 01:00

php-代码

$ical = "BEGIN:VCALENDAR\r\nMETHOD:PUBLISH VERSION:2.0\r\n";
$ical .= "PRODID:-//SYKL.no//Norsk Rittkalender//NO\r\n";
$ical .= "BEGIN:VTIMEZONE\r\nTZID:Europe/Oslo\r\nEND:VTIMEZONE\r\n";
foreach($kalender as $k) {
if($k['typeritt']!="3") {
$ical .= "BEGIN:VEVENT\r\nSUMMARY: " . strtoupper($k['navn']) . "\r\n";
$ical .= "UID: " . $k['rittresultatid'] . "\r\n";
$ical .=  "DTSTART;TZID=Europe/Oslo:" . date('Ymd', strtotime($k['startdato'])) . "T000000\r\n";
$ical .= "DTEND;TZID=Europe/Oslo: " . date('Ymd', strtotime($k['sluttdato'])) . "T000000" ."\r\n";
$ical .= "END:VEVENT\r\n"; }
}
$ical .= "END:VCALENDAR";

$filename="ical.ics";
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $filename);
echo utf8_encode($ical);

提前致谢!

$kalender 数组使用一些挪威语

傻瓜式挪威语:

navn = name
rittresultatid = ID
startdato = start date
sluttdato = end date

我很确定您会看到这种行为,因为您的 VTIMEZONE 没有指定任何时区偏移(有效的 VTIMEZONE 对象必须至少包含一个 STANDARDDAYLIGHT 组件)。尝试包含有效的 VTIMEZONE(请参阅 RFC 5545)或以 UTC 格式指定日期时间。

可以选择通过省略任何时间信息使您的活动“全天”,如下所示:

DTSTART;VALUE=DATE:20160303
DTEND;VALUE=DATE:20160304