Подтвердить что ты не робот

Создать файл .ics динамически

Я создал веб-сайт для клиента, где они могут размещать события. Вместо того, чтобы вручную создавать файлы .ics из iCal для каждого события и загружать его, я бы, однако, было бы лучше вытащить его из базы данных и автоматически автоматически создать файл .ics с помощью PHP.

Я могу извлечь информацию из базы данных (без проблем), но при преобразовании ее в метку времени для файла календаря это сложно. Вот что я храню в базе данных:

Month: 05
Day: 02
Year: 2011
Time: 11:30am - 1:30pm

Вот код для создания моих файлов .ics:

//This is the most important coding.
header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=adamhouston_$id.ics");

echo "BEGIN:VCALENDAR\n";
echo "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN\n";
echo "VERSION:2.0\n";
echo "METHOD:PUBLISH\n";
echo "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n";
echo "BEGIN:VEVENT\n";
echo "CLASS:PUBLIC\n";
echo "CREATED:20091109T101015Z\n";

echo "DESCRIPTION:Speaker: $event_query_row[speaker_name]\\n\\nTopic: $event_query_row[speaker_topic]\n";
echo "DTEND:20100208T040000Z\n";
echo "DTSTAMP:20100109T093305Z\n";
echo "DTSTART:20100208T003000Z\n";
echo "LAST-MODIFIED:20091109T101015Z\n";
echo "LOCATION:$event_query_row[location]\n";
echo "PRIORITY:5\n";
echo "SEQUENCE:0\n";
echo "SUMMARY;LANGUAGE=en-us:ADAM-Houston Event\n";
echo "TRANSP:OPAQUE\n";
echo "UID:040000008200E00074C5B7101A82E008000000008062306C6261CA01000000000000000\n";
echo "X-MICROSOFT-CDO-BUSYSTATUS:BUSY\n";
echo "X-MICROSOFT-CDO-IMPORTANCE:1\n";
echo "X-MICROSOFT-DISALLOW-COUNTER:FALSE\n";
echo "X-MS-OLK-ALLOWEXTERNCHECK:TRUE\n";
echo "X-MS-OLK-AUTOFILLLOCATION:FALSE\n";
echo "X-MS-OLK-CONFTYPE:0\n";
//Here is to set the reminder for the event.
echo "BEGIN:VALARM\n";
echo "TRIGGER:-PT1440M\n";
echo "ACTION:DISPLAY\n";
echo "DESCRIPTION:Reminder\n";
echo "END:VALARM\n";
echo "END:VEVENT\n";
echo "END:VCALENDAR\n";

Теперь, как мне преобразовать данные в моей базе данных в правильную отметку времени/даты?

4b9b3361

Ответ 1

Время iCal сохраняется в формате UTC, а не в часовом поясе, в котором они возникли, если не указано иное (см. править)

Если вы хотите, чтобы ваш код был общим, вам также необходимо сохранить часовой пояс. Если вы действительно хотите... вы можете жестко преобразовать код.

Я бы также рекомендовал не хранить время в этом формате:

 Month: 05
 Day: 02 
 Year: 2011
 Time: 11:30am - 1:30pm

и перейдите к формату временной метки. Вы перейдете от 4 (?) Столбцов к одному. Почему это хорошо? Потому что вы можете использовать php date(), чтобы отформатировать дату для вас именно так, как вам нужно! (вам нужно использовать strtotime(), я верю, а также кто-то имеет функцию преобразования часового пояса в комментариях)

Взгляд на то, что нужно сделать с точки зрения iCal:

 echo "DTSTAMP:<year><month><day>T<hour><minutes><seconds>Z\n";  // Time iCal item was made
 echo "DTSTART:<year><month><day>T<hour><minutes><seconds>Z\n";  // Start time
 echo "DTEND:<year><month><day>T<hour><minutes><seconds>Z\n";    // End time

РЕДАКТИРОВАТЬ:
Z представляет время UTC или абсолютное время.
Вы можете установить часовой пояс в файле и оставить преобразование в программу календаря.
http://tools.ietf.org/html/rfc5545#section-3.2.19