PHP Classes

How to use a PHP iCalendar generator class export event details using the package ICalendar Import and Export: Import and export events in iCalendar format

Recommend this page to a friend!
     
  Info   Example   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2025-11-06 (8 days ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
icalimexport 1.0.0MIT/X Consortium ...8.2Time and Date, Files and Folders, PHP 8
Description 

Author

This package supports importing and exporting events in iCalendar format.

It provides a class that can create new calendars and add events with details such as the start date, duration, subject, description, event period repetition rule, etc.

The package can save a calendar outputting the calendar definition to the current script output in the iCalendar format specified by RFC-5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar).

The iCalendar format is the first choice when such data needs to be exchanged or synchronized between different platforms, systems, or applications. The clear time zone specifications ensure unambiguous, region-independent data exchange at all times.

The package can also import calendar event definitions from a file in the iCalendar format.

Picture of Stefan Kientzler
  Performance   Level  
Name: Stefan Kientzler is available for providing paid consulting. Contact Stefan Kientzler .
Classes: 20 packages by
Country: Germany Germany
Age: 58
All time rank: 71346 in Germany Germany
Week rank: 46 Up2 in Germany Germany Up
Innovation award
Innovation award
Nominee: 11x

Winner: 6x

Instructions

Example

<?php

declare(strict_types=1);

include
'autoloader.php';

use
SKien\iCal\iCalEvent;
use
SKien\iCal\iCalendar;

/**
 * @author Stefanius <s.kientzler@online.de>
 * @copyright MIT License - see the LICENSE file for details
 */

date_default_timezone_set('Europe/Berlin');

$oICal = new iCalendar('Test');

$oEvent = $oICal->createEvent();
$oEvent->setStart(new DateTime('2025-02-23 14:00'));
$oEvent->setDuration(3600);
$oEvent->setSubject('This is the first Testevent to create');
$oEvent->setDescription("The sample demonstrates, how to create a Event\nwith a multiline description!");
$oEvent->setTransparency(iCalEvent::TRANSP_OPAQUE);
$oEvent->setAlarm('-PT30M');
$oEvent->setRRule('FREQ=WEEKLY;INTERVAL=2;COUNT=10');

$oICal->addItem($oEvent);

$oICal->write();


Details

ICal Import/Export

Latest Stable Version License Donate Minimum PHP Version PhpUnit coverage

Overview

This package can read and write data in the iCalendar format specified by RFC-5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar)

The iCalendar format is first choice when such data needs to be exchanged or synchronized between different platforms, systems, or applications. The clear time zone specifications ensure unambiguous, region-independent data exchange at all times.

From the four components event, to-do, journal entrie and free/busy information that are defined within this specification, this package supports

  • Events and
  • ToDo's

> The code and class structure allows a fairly simple extension with the two additional > components - however, since I do not need them yet, the implementation is (still) > pending; feel free to contribute and create according pull requests ;-)

## Timezone handling

The timezone handling when reading is different from that when creating iCalendar files. This is because the time zones used by iCalendar files do not match the PHP time zones (which are based on the time zone identifiers published in the IANA time zone database).

1. When generating a calendar, the (PHP) timezone that is set when the iCalender

instance is created is generally used. An iCal TIMEZONE component with the same 
name is automatically inserted.

2. When reading a calendar, the timezone definitions contained in the file are taken

into account, and all datetime values ??are saved as UNIX timestamps. Since these
values ??are generally UTC-based, it is up to the processing code to decide which
time zone to use to display and/or process the data.

Recurring items

In addition to the actual definition of the components, the iCalendar specification provides an extremely flexible mechanism with the 'Recurrence Rule' to describe recurring items (events, todo's).

When reading elements that use this mechanism, the calling agent can decide how to handle them:

  1. The appointment series resulting from the 'Recurrence Rule' is resolved and the resulting individual items will be generated, which can then be adopted.
  2. The original item remains unchanged. A list of the resulting dates can be retrieved to process/generate the recurring events in the own code.

Formattet Text in descriptions (HTML)

Import

When reading a iCalendar file, formatted HTML text is recognized if it is either stored in the RFC 5545-compliant ALTREP parameter of the description, or if the widely used custom property X-ALT-DESC is used.

If HTML is passed directly in a description (which is actually intended for plain text), it is automatically moved to the HTML description and a plain text representation is created.

If only a HTML description is passed, a plain text representation is auto-created.

It can be queried whether formatted text is available and both versions can be retrieved separately.

Export

When creating an iCalendar file, the description of an item can be set separately as plain text and as formatted text. If only an HTML description is provided, a plain text version is automatically generated before the item is written to the file.

Additionally, there's the option to automatically generate a rudimentary HTML representation of plain text when no formatted text is available. Besides generating HTML line breaks, this option currently only offers valuable benefits when the plain text contains long, difficult-to-read URLs (... this is often the case for calendar entries that refer to further information on the Internet):

Plain URL's such as

https://www.anydomain.de/some-report/in20%a20%further20%folder/report.php?iew=3&source=external

are converted to real HTML links like:

<a href="https://www.anydomain.de/some-report/in20%a20%further20%folder/report.php?iew=3&source=external">www.anydomain.de</a>

this can result in a much better read- and recognizable display by the reading agent in following way:

> www.anydomain.de

Usage

The usage for reading and writing iCalendar files is demonstrated in the sample code files

  • ImportSelect.php
  • ImportTest.php
  • ExportTest.php

that are part of the package and can be found in the root directory.


  Files folder image Files (106)  
File Role Description
Files folder imagedemodata (13 files)
Files folder imagedoc (1 file)
Files folder imageSKien (2 directories)
Files folder imageVendor (2 directories)
Accessible without login Plain text file autoloader.php Aux. Configuration script
Accessible without login Plain text file ExportTest.php Example Example script
Accessible without login Plain text file githubwiki.xml Data Auxiliary data
Accessible without login Plain text file ImportSelect.php Aux. Auxiliary script
Accessible without login Plain text file ImportTest.php Example Example script
Accessible without login HTML file junit.html Doc. Documentation
Accessible without login Plain text file junit.xsl Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file phpstan.neon Data Auxiliary data
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file phpunitbadge Data Auxiliary data
Accessible without login Plain text file PhpUnitCoverage.svg Data Auxiliary data
Accessible without login Plain text file readme.md Doc. Documentation

  Files folder image Files (106)  /  demodata  
File Role Description
  Accessible without login Plain text file Custom1.ics Data Auxiliary data
  Accessible without login Plain text file eM-Client-RRule.ics Data Auxiliary data
  Accessible without login Plain text file eM-Client.ics Data Auxiliary data
  Accessible without login Plain text file Evolution-RRule.ics Data Auxiliary data
  Accessible without login Plain text file Evolution.ics Data Auxiliary data
  Accessible without login Plain text file GoogleCalendar.ics Data Auxiliary data
  Accessible without login Plain text file MS-Outlook-RRule.ics Data Auxiliary data
  Accessible without login Plain text file SamsungCalendar.ics Data Auxiliary data
  Accessible without login Plain text file SCF-Bundesliga.ics Data Auxiliary data
  Accessible without login Plain text file SCF-LigaSpielplan.ics Data Auxiliary data
  Accessible without login Plain text file SCF-Sportschau.ics Data Auxiliary data
  Accessible without login Plain text file TBird-RRule.ics Data Auxiliary data
  Accessible without login Plain text file TBird.ics Data Auxiliary data

  Files folder image Files (106)  /  doc  
File Role Description
  Accessible without login Plain text file rfc5545.pdf Data Auxiliary data

  Files folder image Files (106)  /  SKien  
File Role Description
Files folder imageiCal (17 files)
Files folder imageTest (1 directory)

  Files folder image Files (106)  /  SKien  /  iCal  
File Role Description
  Plain text file iCalAlarm.php Class Class source
  Plain text file iCalAlarmParentInterface.php Class Class source
  Plain text file iCalAlarmReader.php Class Class source
  Plain text file iCalComponent.php Class Class source
  Plain text file iCalendar.php Class Class source
  Plain text file iCalEvent.php Class Class source
  Plain text file iCalEventReader.php Class Class source
  Plain text file iCalHelper.php Class Class source
  Plain text file iCalReader.php Class Class source
  Plain text file iCalRecurrenceRule.php Class Class source
  Plain text file iCalTimezone.php Class Class source
  Plain text file iCalTimezoneProp.php Class Class source
  Plain text file iCalTimezoneReader.php Class Class source
  Plain text file iCalToDo.php Class Class source
  Plain text file iCalToDoReader.php Class Class source
  Plain text file Reader.php Class Class source
  Plain text file Writer.php Class Class source

  Files folder image Files (106)  /  SKien  /  Test  
File Role Description
Files folder imageiCal (9 files, 1 directory)

  Files folder image Files (106)  /  SKien  /  Test  /  iCal  
File Role Description
Files folder imagetestdata (40 files)
  Plain text file iCalAlarmTest.php Class Class source
  Plain text file iCalendarTest.php Class Class source
  Plain text file iCalEventTest.php Class Class source
  Plain text file iCalHelperTest.php Class Class source
  Plain text file iCalRecurrenceRuleTest.php Class Class source
  Plain text file iCalTimezonePropTest.php Class Class source
  Plain text file iCalTimezoneTest.php Class Class source
  Plain text file iCalToDoTest.php Class Class source
  Plain text file UnitTestLogger.php Class Class source

  Files folder image Files (106)  /  SKien  /  Test  /  iCal  /  testdata  
File Role Description
  Accessible without login Plain text file Berlin.txt Doc. Documentation
  Accessible without login Plain text file BerlinFromTimezone.txt Doc. Documentation
  Accessible without login Plain text file InvalidCases.json Data Auxiliary data
  Accessible without login Plain text file InvalidEvent1.ics Data Auxiliary data
  Accessible without login Plain text file InvalidEvent2.ics Data Auxiliary data
  Accessible without login Plain text file InvalidEvent3.ics Data Auxiliary data
  Accessible without login Plain text file InvalidEvent4.ics Data Auxiliary data
  Accessible without login Plain text file InvalidEvent5.ics Data Auxiliary data
  Accessible without login Plain text file InvalidEvent6.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo1.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo2.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo3.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo4.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo5.ics Data Auxiliary data
  Accessible without login Plain text file InvalidToDo6.ics Data Auxiliary data
  Accessible without login Plain text file NewYork.txt Doc. Documentation
  Accessible without login Plain text file NotSupported1.ics Data Auxiliary data
  Accessible without login Plain text file NotSupportedCases.json Data Auxiliary data
  Accessible without login Plain text file RRuleParamError.json Data Auxiliary data
  Accessible without login Plain text file RRuleTestCases.json Data Auxiliary data
  Accessible without login Plain text file TestEvent1.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent2.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent3.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent4.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent5.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent6.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent7.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent8.ics Data Auxiliary data
  Accessible without login Plain text file TestEvent9.ics Data Auxiliary data
  Accessible without login Plain text file TestEventRRule.ics Data Auxiliary data
  Accessible without login Plain text file TestEventRRule2.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo1.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo2.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo3.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo4.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo5.ics Data Auxiliary data
  Accessible without login Plain text file TestToDo6.ics Data Auxiliary data
  Accessible without login Plain text file TestToDoRRule.ics Data Auxiliary data
  Accessible without login Plain text file VEventTestCases.json Data Auxiliary data
  Accessible without login Plain text file VToDoTestCases.json Data Auxiliary data

  Files folder image Files (106)  /  Vendor  
File Role Description
Files folder imagePsr (1 directory)
Files folder imageSoundasleep (5 files)

  Files folder image Files (106)  /  Vendor  /  Psr  
File Role Description
Files folder imageLog (8 files)

  Files folder image Files (106)  /  Vendor  /  Psr  /  Log  
File Role Description
  Plain text file AbstractLogger.php Class Class source
  Plain text file InvalidArgumentException.php Class Class source
  Plain text file LoggerAwareInterface.php Class Class source
  Plain text file LoggerAwareTrait.php Class Class source
  Plain text file LoggerInterface.php Class Class source
  Plain text file LoggerTrait.php Class Class source
  Plain text file LogLevel.php Class Class source
  Plain text file NullLogger.php Class Class source

  Files folder image Files (106)  /  Vendor  /  Soundasleep  
File Role Description
  Accessible without login Plain text file Html2Text on GitHub.url Data Auxiliary data
  Plain text file Html2Text.php Class Class source
  Plain text file Html2TextException.php Class Class source
  Accessible without login Plain text file LICENSE.md Lic. License text
  Accessible without login Plain text file README.md Doc. Documentation

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0