2016-02-29 1 views
0

Я пытаюсь экспортировать календарь из моей базы данных в файл ical с помощью php.ical события allday начинаются с +01: 00

Он отлично работает, за исключением одного: все события начинаются с 01:00, а не 00:00. Это может иметь какое-то отношение к зиме/летнему сезону. Я установил часовой пояс (который изменил StartTime с 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 

ответ

0

Я уверен, что вы видите это поведение, потому что ваш VTIMEZONE не указывает никаких смещений в часовом поясе (действительный объект VTIMEZONE должен содержать не менее одного компонента STANDARD или DAYLIGHT). Попытайтесь включить действительный VTIMEZONE (см. RFC 5545) или укажите время вашей даты в UTC.

Необязательно, чтобы ваше мероприятие «весь день», исключив любую информацию о времени, например так:

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