PHP中的ICalendar解析器,支持时区

时间:2009-11-23 11:22:21

标签: php parsing timezone icalendar

我正在寻找一个可以解析ICalendar(ICS)文件并正确处理时区的PHP类。

我自己已经创建了一个ICS解析器,但它只能处理PHP已知的时区(如'Europe / Paris')。

不幸的是,Evolution生成的ICS文件(Ubuntu的默认日历软件)不使用默认时区ID。它使用特定的时区ID导出事件,同时导出时区的完整定义:夏令时,重复规则以及了解时区的所有难题。

这对我来说太过分了。由于它对我的女朋友来说只是一个小工具,我没有时间进一步调查ICalendar规范并自己创建一个完整的ICalendar解析器。

那么在PHP中是否有任何可以解析时区定义的ICalendar文件格式的实现?

1 个答案:

答案 0 :(得分:10)

很可能有很多库可以解析.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);