phpfui/icalendar

icalendar.org PHP实现rfc5545的现代分支,用于管理iCal格式文件

V1.0.10 2019-10-31 00:00 UTC

This package is auto-updated.

Last update: 2024-09-23 21:09:38 UTC


README

Zap Calendar iCalendar Library的7.4命名空间分支的现代分支

Zap Calendar iCalendar Library是一个支持iCalendar (RFC 5545)标准的PHP库。

此PHP库用于读取和写入iCalendar格式的馈送和文件。库的功能包括

  • 支持读取和写入iCalendar文件
  • 基于对象创建和操作iCalendar文件
  • 支持将RRULE扩展为重复日期列表
  • 支持将时区信息添加到iCalendar文件

所有iCalendar数据都存储在PHP对象树中。这允许在不要求专门的库函数调用的情况下向iCalendar馈送添加任何属性。权力伴随着责任。缺少或无效的属性可能导致生成的iCalendar文件无效。请访问iCalendar.org查看有效属性并使用站点的iCalendar验证工具测试您的馈送。

库API文档可在http://icalendar.org/zapcallibdocsPHPFUI/ICalendarOrg找到

请参阅示例文件夹中的读取和写入iCalendar文件的程序。最好将示例文件包含到具有活动自动加载器的文件中,或包含所有类以直接运行示例。

使用ZCiCal对象创建ical对象

$icalobj = new \ICalendarOrg\ZCiCal();

添加事件对象

$eventobj = new \ICalendarOrg\ZCiCalNode("VEVENT", $icalobj->curnode);

将开始日期和结束日期添加到事件中

// add start date
$eventobj->addNode(new \ICalendarOrg\ZCiCalDataNode("DTSTART:" . \ICalendarOrg\ZDateHelper::fromSqlDateTime("2020-01-01 12:00:00")));

// add end date
$eventobj->addNode(new \ICalendarOrg\ZCiCalDataNode("DTEND:" . \ICalendarOrg\ZDateHelper::fromSqlDateTime("2020-01-01 13:00:00")));

使用export()函数调用以iCalendar格式写入对象

echo $icalobj->export();

此示例将不会验证,因为它缺少一些必需的元素。请查看simpleevent.php示例以了解验证的iCalendar文件所需的最小元素数量。

要创建多事件iCalendar文件,只需创建多个事件对象。例如

$icalobj = new \ICalendarOrg\ZCiCal();
$eventobj1 = new \ICalendarOrg\ZCiCalNode("VEVENT", $icalobj->curnode);
$eventobj1->addNode(new \ICalendarOrg\ZCiCalDataNode("SUMMARY:Event 1"));
...
$eventobj2 = new \ICalendarOrg\ZCiCalNode("VEVENT", $icalobj->curnode);
$eventobj2->addNode(new \ICalendarOrg\ZCiCalDataNode("SUMMARY:Event 2"));
...

要读取现有的iCalendar文件/馈送,请使用表示iCalendar文件内容的字符串创建ZCiCal对象

$icalobj = new \ICalendarOrg\ZCiCal($icalstring);

大型iCalendar文件可以分块读取,以减少在内存中存储iCalendar馈送所需的内存量。此示例一次读取500个事件

$icalobj = null;
$eventcount = 0;
$maxevents = 500;
do
{
	$icalobj = new \ICalendarOrg\ZCiCal($icalstring, $maxevents, $eventcount);
	...
	$eventcount += $maxevents;
}
while($icalobj->countEvents() >= $eventcount);

您可以使用这种方式从导入的(或创建的)iCalendar对象中读取事件

foreach($icalobj->tree->child as $node)
{
	if($node->getName() == "VEVENT")
	{
		foreach($node->data as $key => $value)
		{
			if($key == "SUMMARY")
			{
				echo "event title: " . $value->getValues() . "\n";
			}
		}
	}
}

已知限制

  • 由于库利用对象来读取和写入iCalendar数据,因此iCalendar数据的尺寸限制为机器上可用的内存量。ZCiCal()对象支持读取事件范围以最小化内存空间。
  • 库在导入文件时忽略时区信息,而是利用PHP的时区库进行计算(导出文件时支持时区)。导入的时区需要别名到PHP支持的时区
  • 目前,库不支持RRULE项中的"BYSETPOS"选项。