使用PHP创建iCal日历事件

时间:2011-07-18 15:40:33

标签: php calendar icalendar

我正在尝试创建一个将在iCal中创建日历事件的PHP脚本。我在这里和谷歌搜索过,只得到了关于将iCal事件导入PHP制作日历的结果。这与我的需要相反。

我没有任何代码要包含,因为我没有起点。关于我应该从哪里开始的任何建议?

3 个答案:

答案 0 :(得分:3)

几年前,我开始编写iCalendar库。它处于漂亮的alpha阶段(我几乎放弃了它),当时没有PHP 5,并且那里没有很多功能,但是:

  • 我确实有很多代码用于建模iCalendar RFC(你可能想看一下)。
  • 它确实能够以编程方式创建事件并吐出iCal格式

希望有所帮助:

答案 1 :(得分:2)

从这里开始。这将为您提供icalendar事件的文件格式。然后你可以使用php输出这样的文件和你的自定义数据:

http://en.wikipedia.org/wiki/ICalendar

我过去曾将此作为项目的参考点。

答案 2 :(得分:2)

试试这个(来自https://gist.github.com/jakebellacera/635416

<?
// 1. Set the correct headers for this file
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $filename);

// 2. Define helper functions

// Converts a unix timestamp to an ics-friendly format
// NOTE: "Z" means that this timestamp is a UTC timestamp. If you need
// to set a locale, remove the "\Z" and modify DTEND, DTSTAMP and DTSTART
// with TZID properties (see RFC 5545 section 3.3.5 for info)
//
// Also note that we are using "H" instead of "g" because iCalendar's Time format
// requires 24-hour time (see RFC 5545 section 3.3.12 for info).
function dateToCal($timestamp) {
  return date('Ymd\THis\Z', $timestamp);
}

// Escapes a string of characters
function escapeString($string) {
  return preg_replace('/([\,;])/','\\\$1', $string);
}

// 3. Echo out the ics file's contents
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTEND:<?= dateToCal($dateend) ?>
UID:<?= uniqid() ?>
DTSTAMP:<?= dateToCal(time()) ?>
LOCATION:<?= escapeString($address) ?>
DESCRIPTION:<?= escapeString($description) ?>
URL;VALUE=URI:<?= escapeString($uri) ?>
SUMMARY:<?= escapeString($summary) ?>
DTSTART:<?= dateToCal($datestart) ?>
END:VEVENT
END:VCALENDAR