PHPackages                             org\_heigl/calendar-aggregator - 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. org\_heigl/calendar-aggregator

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

org\_heigl/calendar-aggregator
==============================

Aggregate iCalendar and CalDav calendars

0.2.0(9y ago)214MITPHP

Since Mar 20Pushed 9y ago2 watchersCompare

[ Source](https://github.com/heiglandreas/CalendarAggregator)[ Packagist](https://packagist.org/packages/org_heigl/calendar-aggregator)[ RSS](/packages/org-heigl-calendar-aggregator/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (5)Versions (4)Used By (0)

CalendarAggregator
==================

[](#calendaraggregator)

Aggregate iCalendar and CalDav calendars

Usage
-----

[](#usage)

```
$aggregator = new Aggregator();
$aggregator->add(new Icalendar('https://example.com/icalendar'));
// $aggregator->add(new CalDav('https://example.com/caldav'));

$range = $aggregator->getRange(
    new DateTimeImmutable('2017-01-01'),
    new DateTimeImmutable('2018-01-01')
);

foreach ($range as $event) {
    echo sprintf(
        'Event %s starts %s and ends %s',
        $event->getTitle,
        $event->getStart()->format('c'),
        $event->getEnd()->format('c')
    );
}
```

Alternatively you can also retrieve the events in "lanes" where each lane contains a list of non-overlapping events.

```
$aggregator = new Aggregator();
$aggregator->add(new Icalendar('https://example.com/icalendar'));
// $aggregator->add(new CalDav('https://example.com/caldav'));

$range = $aggregator->getRange(
    new DateTimeImmutable('2017-01-01'),
    new DateTimeImmutable('2018-01-01')
);

foreach ($range->getLanes() as $lane) {
    foreach ($lane as $event) {
        echo sprintf(
            'Event %s starts %s and ends %s',
            $event->getTitle,
            $event->getStart()->format('c'),
            $event->getEnd()->format('c')
        );
    }
}
```

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity55

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

Every ~9 days

Total

2

Last Release

3380d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5ae5183aaad2bc7453230704bd6991dc6ccbcd6e775c6a29efdc94350a69f247?d=identicon)[heiglandreas](/maintainers/heiglandreas)

---

Top Contributors

[![heiglandreas](https://avatars.githubusercontent.com/u/91998?v=4)](https://github.com/heiglandreas "heiglandreas (9 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/org-heigl-calendar-aggregator/health.svg)

```
[![Health](https://phpackages.com/badges/org-heigl-calendar-aggregator/health.svg)](https://phpackages.com/packages/org-heigl-calendar-aggregator)
```

###  Alternatives

[fisharebest/webtrees

webtrees online genealogy

77416.0k20](/packages/fisharebest-webtrees)[roundcube/carddav

CardDAV adapter for connecting to CardDAV-enabled addressbooks

27959.0k](/packages/roundcube-carddav)[lochmueller/calendarize

Create a structure for timely controlled tables (e.g. events) and one plugin for the different output of calendar views (list, detail, month, year, day, week...). The extension is shipped with one default event table, but you can also 'calendarize' your own table/model. It is completely independent and configurable! Use your own models as event items in this calender. Development on https://github.com/lochmueller/calendarize

76161.6k13](/packages/lochmueller-calendarize)[codeigniter4/devkit

Development toolkit for CodeIgniter libraries and projects

68195.7k114](/packages/codeigniter4-devkit)

PHPackages © 2026

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