Синтаксический анализатор ICalendar в PHP, который поддерживает часовые пояса

Я ищу класс PHP, который может проанализировать ICalendar (ICS) файл и правильно обработать часовые пояса.

Я уже создал синтаксический анализатор ICS сам, но он может только обработать часовые пояса, известные PHP (как 'Европа/Париж).

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

Это слишком много для меня. Так как это была только маленькая утилита для моей девушки, у меня не будет времени, чтобы исследовать далее спецификацию ICalendar и создать полноценный синтаксический анализатор ICalendar самого.

Таким образом, там кто-либо - известная реализация в PHP формата файла ICalendar, который может проанализировать определения часовых поясов?

6
задан Vincent Robert 23 November 2009 в 12:50
поделиться

1 ответ

Скорее всего, существует множество библиотек, анализирующих файлы .ics, но я покажу вам один пример, который мне подходит.

Я использовал эту библиотеку: http://www.phpclasses.org/browse/file/16660.html

Это дает вам большую гибкость в работе с различными типами компонентов ICal: VEVENT, VTODO, VJOURNAL, VFREEBUSY, VALARM и VTIMEZONE (тот, о котором вы спрашивали).

Пример:

<pre><?php

//
// Open library
//
require_once( "iCalcreator.class.php" ) ;

//
// Demo ICal file contents
//
$string = <<<EOS
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VTIMEZONE
TZID:US-Eastern
LAST-MODIFIED:19870101T000000Z
BEGIN:STANDARD
DTSTART:19971026T020000
RDATE:19971026T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19971026T020000
RDATE:19970406T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
EOS
;

//
// There is no direct string parsing functionality,
// so first create a temporary file
//
$filename = tempnam( ".", "" ) ;
$f = fopen($filename,"w") ;
fwrite( $f, $string );
fclose($f);

//
// ... parse it into an object
//
$var = new vcalendar();
$var->parse($filename);
var_dump( $var );
$event = $var->components[0] ;
var_dump( $event->createDtstamp() );


//
// ... and finally remove all temporary data.
//
unlink($filename);
10
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: