2016-04-05 3 views
0

Я использую icalendar в своем проекте. В моем приложении есть некоторые привилегии, где пользователь может создавать и экспортировать файл .ics и импортировать в Outlook. В Outlook пользователь может добавить какое-то событие, а также сгенерировать файл .ics и импортировать его в календарь. Вопрос в том, когда экспорт пользователь Микросхемы файл, то файл содержит следующие данные:Экспорт файла .ics из Oulook, появляющегося в другом часовом поясе

"start_datetime" => "2016-04-06 18:00:00" //UTC Time 
    "end_datetime" => "2016-04-06 18:30:00" //UTC Time 
    "status" => null 
    "title" => "Free" 
    "description" => "" 
    "from" => "Dr Demo xprt02" 

Когда пользователь импортирует этот файл в перспективе, экспорт из перспективы снова и импорт обратно в приложение затем .ics возвращения:

array:11 [▼ 
     "CLASS" => "PUBLIC" 
     "CREATED" => "20160405T073709Z" 
     "DTEND" => "20160406T130000Z" 
     "DTSTAMP" => "20160405T020700Z" 
     "DTSTART" => "20160406T123000Z" 
     "LAST-MODIFIED" => "20160405T073709Z" 
     "SEQUENCE" => "0" 
     "SUMMARY" => " Free" 
     "TRANSP" => "OPAQUE" 
     "UID" => "20160405T073649-31540-f4wd.com" 
     "X-MICROSOFT-CDO-BUSYSTATUS" => "BUSY" 
    ] 

после преобразования .ics содержание в php я получаю.

"start_datetime" => "2016-04-06 12:30:00" 
    "end_datetime" => "2016-04-06 13:00:00" 
    "status" => null 
    "title" => "Free" 
    "description" => "" 
    "from" => "Dr Demo xprt02" 

Я не знаю, почему существует такая разница в startdatetime и end_datetime после получения того же файла с прогнозом. Я думаю, что прогноз не возвращается в UTC. Если у кого-то есть идея, пожалуйста, поделитесь.

+0

Вы должны показать содержимое ics, а не преобразованный php. Конечно, есть проблема с часовым поясом. – fusion3k

+0

Прежде всего, я предлагаю вам сравнить реальные файлы ics (текстовые файлы, открыть его с помощью основного текстового редактора (см. [Здесь] (http://apple.stackexchange.com/questions/125338/calendar-ical-ics- формат) в примерный формат), а затем проверить с помощью оригинального файла ics (не созданного вашей программой), импортировать его в Outlook и затем экспортировать, чтобы узнать, не изменилось ли поведение. Тогда вы можете понять, есть ли проблема из вашего скрипта или из Outlook. – fusion3k

+0

@ fusion3k, я уже сделал это. Некоторая колонка типа «CLASS» => «PUBLIC, X-MICROSOFT-CDO-BUSYSTATUS и т. д.» Я использовал в своем скрипте после ссылки из файла .ics (экспорт из Outlook). –

ответ

-1

У меня есть ответ.

$ics = "BEGIN:VCALENDAR\n"; 
$ics .= "PRODID:-//F4WD TM//NONSGML F4WD//EN\n"; 
$ics .= "VERSION:2.0\n"; 
$ics .= "CALSCALE:GREGORIAN\n"; 
$ics .= "METHOD:PUBLISH\n"; // requied by Outlook 
$ics .= "X-WR-CALNAME:\n"; 
$ics .= "TZ:+00:\n"; 
$ics .= "BEGIN:VEVENT\n"; 
$ics .= "CLASS:PUBLIC\n"; 
$ics .= "CREATED:".date('Ymd', strtotime($v['start_datetime'])).'T'.date('His', strtotime($v['start_datetime']))."Z\n"; 
$ics .= "DTEND;TZID=UTC:".date('Ymd', strtotime($v['end_datetime'])).'T'.date('His', strtotime($v['end_datetime']))."Z\n"; 
$ics .= "DTSTAMP:".date('Ymd').'T'.date('His')."Z\n"; 
$ics .= "DTSTART;TZID=UTC:".date('Ymd', strtotime($v['start_datetime'])).'T'.date('His', strtotime($v['start_datetime']))."\n"; 
$ics .= "LAST-MODIFIED:".date('Ymd', strtotime($v['start_datetime'])).'T'.date('His', strtotime($v['start_datetime']))."\n"; 
$ics .= "SEQUENCE: 0\n"; 
$ics .= "SUMMARY: ".$v['title']. "\n"; 
$ics .= "TRANSP:OPAQUE \n"; 
$ics .= "UID:".date('Ymd').'T'.date('His')."-".rand()."-".$domain_url."\n"; 
$ics .= "DESCRIPTION:".$v['description']."\n"; 
$ics .= "X-MICROSOFT-CDO-BUSYSTATUS:BUSY".$v['status']."\n"; 
$ics .= "END:VEVENT\n"; 
$ics .= "END:VCALENDAR\n"; 

Я не использовал ; TZID = UTC с DTSTART и DTEND. Так что теперь все работает нормально.