PHPackages                             relaxsd/php-icalendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. relaxsd/php-icalendar

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

relaxsd/php-icalendar
=====================

Fluent iCalendar creator for PHP

v0.8.0(6y ago)158MITPHPCI failing

Since May 11Pushed 6y ago1 watchersCompare

[ Source](https://github.com/relaxsd/php-icalendar)[ Packagist](https://packagist.org/packages/relaxsd/php-icalendar)[ RSS](/packages/relaxsd-php-icalendar/feed)WikiDiscussions master Synced 4d ago

READMEChangelogDependencies (1)Versions (2)Used By (0)

php-icalendar
=============

[](#php-icalendar)

Fluent iCalendar creator for PHP

For the RFC, See

### Current status:

[](#current-status)

- RFC Coverage: 80% (supports all components except `VTIMEZONE`)
- Fluent interface: 70% (working on it)
- Test cases: 10% (tested just some examples from the RFC, see below.)

Examples from the RFC:
----------------------

[](#examples-from-the-rfc)

### Event

[](#event)

The following is an example of the "VEVENT" calendar component used to represent a meeting that will also be opaque to searches for busy time:

```
 BEGIN:VEVENT
 UID:19970901T130000Z-123401@host.com
 DTSTAMP:19970901T1300Z
 DTSTART:19970903T163000Z
 DTEND:19970903T190000Z
 SUMMARY:Annual Employee Review
 CLASS:PRIVATE
 CATEGORIES:BUSINESS,HUMAN RESOURCES
 END:VEVENT

```

To create this event in PHP:

```
$event  = new Event('19970901T130000Z-123401@host.com')
            ->setDateTimeStamp('1997-09-01 13:00 UTC')
            ->setDateTimeStart('1997-09-03 16:30 UTC')
            ->setDateTimeEnd('1997-09-03 19:00 UTC')
            ->setSummary('Annual Employee Review')
            ->setClassification(Classification::CLASSIFICATION_PRIVATE)
            ->setCategories(['BUSINESS', 'HUMAN RESOURCES']);
```

### Audio Alarm

[](#audio-alarm)

The following example is for a "VALARM" calendar component that specifies an audio alarm that will sound at a precise time and repeat 4 more times at 15 minute intervals:

```
 BEGIN:VALARM
 TRIGGER;VALUE=DATE-TIME:19970317T133000Z
 REPEAT:4
 DURATION:PT15M
 ACTION:AUDIO
 ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud
 END:VALARM

```

To create this event in PHP:

```
$audioAlarm = new AudioAlarm()
    ->setTrigger('1997-03-17 13:30 UTC')
    ->setRepeatCount(4)
    ->setAttachment(UriAttachment::forAudioUrl('ftp://host.com/pub/sounds/bell-01.aud'))
    ->setDuration(Duration::forMinutes(15));
```

### Audio Alarm

[](#audio-alarm-1)

The following example is for a "VALARM" calendar component that specifies an audio alarm that will sound at a precise time and repeat 4 more times at 15 minute intervals:

```
 BEGIN:VALARM
 TRIGGER;VALUE=DATE-TIME:19970317T133000Z
 REPEAT:4
 DURATION:PT15M
 ACTION:AUDIO
 ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud
 END:VALARM

```

To create this event in PHP:

```
$audioAlarm = new AudioAlarm()
    ->setTrigger('1997-03-17 13:30 UTC')
    ->setRepeatCount(4)
    ->setAttachment(UriAttachment::forAudioUrl('ftp://host.com/pub/sounds/bell-01.aud'))
    ->setDuration(Duration::forMinutes(15));
```

### TODO Item

[](#todo-item)

The following is an example of a "VTODO" calendar component:

```
 BEGIN:VTODO
 UID:19970901T130000Z-123404@host.com
 DTSTAMP:19970901T1300Z
 DTSTART:19970415T133000Z
 DUE:19970416T045959Z
 SUMMARY:1996 Income Tax Preparation
 CLASS:CONFIDENTIAL
 CATEGORIES:FAMILY,FINANCE
 PRIORITY:1
 STATUS:NEEDS-ACTION
 END:VTODO

```

To create this event in PHP:

```
$todo = new Todo()
    ->setUniqueIdentifier('19970901T130000Z-123404@host.com')
    ->setDateTimeStamp('1997-09-01 13:00 UTC')
    ->setDateTimeStart('1997-04-15 13:30 UTC')
    ->setDateTimeDue('1997-04-16 04:59:59 UTC')
    ->setSummary('1996 Income Tax Preparation')
    ->setClassification(Classification::CLASSIFICATION_CONFIDENTIAL)
    ->setCategories(['FAMILY', 'FINANCE'])
    ->setPriority(1)
    ->setStatus(Status::STATUS_NEEDS_ACTION);
```

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2195d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7682f7af65b0cef9505ca2f720f92a6aef17c1df57687185c51c1cbfb79dfe88?d=identicon)[relaxsd](/maintainers/relaxsd)

---

Top Contributors

[![mk-relax](https://avatars.githubusercontent.com/u/7390035?v=4)](https://github.com/mk-relax "mk-relax (9 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/relaxsd-php-icalendar/health.svg)

```
[![Health](https://phpackages.com/badges/relaxsd-php-icalendar/health.svg)](https://phpackages.com/packages/relaxsd-php-icalendar)
```

###  Alternatives

[casinelli/currency

Handles currency for Laravel 5.

1911.8k](/packages/casinelli-currency)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
