PHPackages                             soockee/php-calendar - 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. soockee/php-calendar

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

soockee/php-calendar
====================

A simple PHP class to generate calendars.

011PHP

Since Feb 4Pushed 1y agoCompare

[ Source](https://github.com/soockee/php-calendar)[ Packagist](https://packagist.org/packages/soockee/php-calendar)[ RSS](/packages/soockee-php-calendar/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

PHP Calendar
============

[](#php-calendar)

A PHP class that makes generating calendars as easy as possible.

You can use the addEvent() or addEvents() methods to mark events on the generated calendar.

This is fully compatible with *PHP 5 through tzo **PHP 8.1+***

Fork
====

[](#fork)

This is a fork of [benhall14/php-calendar](https://github.com/benhall14/php-calendar)

The additional features and modifications described in the next sections.

Multi-Cell Event Support
------------------------

[](#multi-cell-event-support)

This implementation makes events span over multiple rows, if an event start and end date exceeds a single cells interval.

Dynamic Week View
-----------------

[](#dynamic-week-view)

The weekview is display based on current days date instead of fixed monday or sunday.

Installation via Composer
=========================

[](#installation-via-composer)

You can now install this class via composer.

```
$ composer require soockee/php-calendar

```

**Remember** to add the composer autoloader before using the class and use the correct namespace.

```
require 'vendor/autoload.php';

use soockee\phpCalendar\Calendar as Calendar;

```

Usage
=====

[](#usage)

Please make sure you have added the required classes.

#### Styling

[](#styling)

You can apply styles in one of three ways:

1. Using $calendar-&gt;stylesheet() after you have initialised a calendar;

```
    $calendar = new Calendar;
    $calendar->stylesheet();
```

2. Using the calendar.css (or calendar.min.css) from the css directory;

```

```

3. Create your own stylesheet and add it to the head of your HTML document.

#### Draw a 'Month View' calendar

[](#draw-a-month-view-calendar)

In its simplest form, use the following to create a calendar for current month. This will use all defaults (English, Week starting on Sunday, including stylesheet, printing to the page).

```
    (new Calendar)->display();
```

Or, you can break it down with full customisability:

```
    # create the calendar object
    $calendar = new Calendar;

    # change the weekly start date to "Monday"
    $calendar->useMondayStartingDate();

    # or revert to the default "Sunday"
    $calendar->useSundayStartingDate();

    # (optional) - if you want to use full day names instead of initials (ie, Sunday instead of S), apply the following:
    $calendar->useFullDayNames();

    # to revert to initials, use:
    $calendar->useInitialDayNames();

    # use the French locale, with days and month names being translated to French.
    $calendar->setLocale('fr_FR');
    # This uses the Carbon locales - https://carbon.nesbot.com/docs/#api-localization

    # add your own table class(es)
    $calendar->addTableClasses('class-1 class-2 class-3');
    # or using an array of classes.
    $calendar->addTableClasses(['class-1', 'class-2', 'class-3']);

    # (optional) - if you want to hide certain weekdays from the calendar, for example a calendar without weekends, you can use the following methods:
    $calendar->hideSaturdays() 		# This will hide Saturdays
    $calendar->hideSundays(); 		# This will hide Sundays
    $calendar->hideMondays(); 		# This will hide Mondays
    $calendar->hideTuesdays(); 		# This will hide Tuesdays
    $calendar->hideWednesdays();	# This will hide Wednesdays
    $calendar->hideThursdays();		# This will hide Thursdays
    $calendar->hideFridays();		# This will hide Fridays

    # (optional) - Translated Calendars - currently, there is only Spanish, but see "Translations" below for adding your own strings.
    $calendar->useSpanish();

    # if needed, add event
	$calendar->addEvent(
	    '2022-01-14',   # start date in either Y-m-d or Y-m-d H:i if you want to add a time.
	    '2022-01-14',   # end date in either Y-m-d or Y-m-d H:i if you want to add a time.
	    'My Birthday',  # event name text
	    true,           # should the date be masked - boolean default true
	    ['myclass', 'abc']   # (optional) additional classes in either string or array format to be included on the event days
	    ['event-class', 'abc']   # (optional) additional classes in either string or array format to be included on the event summary box
	);

    # or for multiple events

	$events = array();

	$events[] = array(
		'start' => '2022-01-14',
		'end' => '2022-01-14',
		'summary' => 'My Birthday',
		'mask' => true,
		'classes' => ['myclass', 'abc'],
        'event_box_classes' => ['event-box-1']
	);

	$events[] = array(
		'start' => '2022-12-25',
		'end' => '2022-12-25',
		'summary' => 'Christmas',
		'mask' => true
	);

	$calendar->addEvents($events);

    # finally, to draw a calendar
    echo $calendar->draw(date('Y-m-d')); # draw this months calendar

    # this can be repeated as many times as needed with different dates passed, such as:
    echo $calendar->draw(date('Y-01-01')); # draw a calendar for January this year
    echo $calendar->draw(date('Y-02-01')); # draw a calendar for February this year
    echo $calendar->draw(date('Y-03-01')); # draw a calendar for March this year
    echo $calendar->draw(date('Y-04-01')); # draw a calendar for April this year
    echo $calendar->draw(date('Y-05-01')); # draw a calendar for May this year
    echo $calendar->draw(date('Y-06-01')); # draw a calendar for June this year

    # to use the pre-made color schemes, call the ->stylesheet() method and then pass the color choice to the draw method, such as:
    echo $calendar->draw(date('Y-m-d'));            # print a (default) turquoise calendar
    echo $calendar->draw(date('Y-m-d'), 'purple');  # print a purple calendar
    echo $calendar->draw(date('Y-m-d'), 'pink');    # print a pink calendar
    echo $calendar->draw(date('Y-m-d'), 'orange');  # print a orange calendar
    echo $calendar->draw(date('Y-m-d'), 'yellow');  # print a yellow calendar
    echo $calendar->draw(date('Y-m-d'), 'green');   # print a green calendar
    echo $calendar->draw(date('Y-m-d'), 'grey');    # print a grey calendar
    echo $calendar->draw(date('Y-m-d'), 'blue');    # print a blue calendar

    # you can also call ->display(), which handles the echo'ing and adding the stylesheet.
    echo $calendar->display(date('Y-m-d')); # draw this months calendar
```

#### Draw a 'Week View' calendar

[](#draw-a-week-view-calendar)

Instead of a 'month view' calendar, you can now render as a 'week view'. To do this, simply use -&gt;useWeekView(). Remember, when adding events to a week-view calendar, you need to include the time too (see events above).

```
    $events = array();

    $events[] = array(
        'start' => '2022-01-14 14:40',
        'end' => '2022-01-14 15:10',
        'summary' => 'My Birthday',
        'mask' => true,
        'classes' => ['myclass', 'abc']
    );

    $events[] = array(
        'start' => '2022-11-04 14:00',
        'end' => '2022-11-04 18:30',
        'summary' => 'Event 1',
        'mask' => true
    );
    $events[] = array(
        'start' => '2022-11-04 14:00',
        'end' => '2022-11-04 18:30',
        'summary' => 'Event 2',
        'mask' => true
    );

    $calendar = new Calendar;

    $calendar->addEvents($events)->setTimeFormat('00:00', '00:00', 10)->useWeekView()->display(date('Y-m-d'), 'green');
```

You can change the start/end times of the day, along with the time interval by using the -&gt;setTimeFormat method:

```
    $calendar->setTimeFormat('00:00', '00:00', 10)->useWeekView()->display(date('Y-m-d'), 'green');
    # This will print a week view calendar with 10 minute slots from midnight to midnight - ie. 00:00, 00:10, 00:20 and so on.
```

#### Monday Start Date

[](#monday-start-date)

You can now change the weekly start date from a **Sunday** to a **Monday**. To activate this, simple use the **useMondayStartingDate()** method before you 'draw'.

```
    $calendar = new Calendar;
    $calendar->useMondayStartingDate();
    $calendar->display(date('Y-m-d'), 'green');
```

#### Translated Calendars

[](#translated-calendars)

We now use automatically from the date and the setLocale() method. If you use -&gt;setLocale('fr\_FR'), then the days and month names will be French. For more information on the Carbon localization, see

Credits
=======

[](#credits)

- [GeoSot](https://github.com/GeoSot)

Requirements
============

[](#requirements)

**Carbon**

License
=======

[](#license)

Copyright (c) 2016-2022 Benjamin Hall,

Copyright (c) 2025 Simon Stockhause

Licensed under the MIT license

###  Health Score

16

—

LowBetter than 4% of packages

Maintenance31

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity16

Early-stage or recently created project

 Bus Factor1

Top contributor holds 53.8% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/7c51778ed0b76beeea67e3cfb54a7f867604e825d59ab6bfdd32e94a7da211ee?d=identicon)[soockee](/maintainers/soockee)

---

Top Contributors

[![benhall14](https://avatars.githubusercontent.com/u/17323507?v=4)](https://github.com/benhall14 "benhall14 (43 commits)")[![GeoSot](https://avatars.githubusercontent.com/u/22406063?v=4)](https://github.com/GeoSot "GeoSot (20 commits)")[![soockee](https://avatars.githubusercontent.com/u/24325735?v=4)](https://github.com/soockee "soockee (11 commits)")[![pascalchevrel](https://avatars.githubusercontent.com/u/454375?v=4)](https://github.com/pascalchevrel "pascalchevrel (1 commits)")[![Pony2001](https://avatars.githubusercontent.com/u/116486946?v=4)](https://github.com/Pony2001 "Pony2001 (1 commits)")[![rickyosser](https://avatars.githubusercontent.com/u/22371262?v=4)](https://github.com/rickyosser "rickyosser (1 commits)")[![wsmwason](https://avatars.githubusercontent.com/u/1227493?v=4)](https://github.com/wsmwason "wsmwason (1 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")[![nazaralwi](https://avatars.githubusercontent.com/u/37035339?v=4)](https://github.com/nazaralwi "nazaralwi (1 commits)")

### Embed Badge

![Health badge](/badges/soockee-php-calendar/health.svg)

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

###  Alternatives

[ezsystems/eztags-ls

eZ Tags is an extension for eZ Publish, providing more functionality for tagging content objects than ezkeyword datatype included in eZ Publish kernel.

40204.3k3](/packages/ezsystems-eztags-ls)[hidehalo/emoji

filtes emoji symbols for you

31158.4k](/packages/hidehalo-emoji)[alekseon/module-cleanrunningjobs

Mark running cronjobs as error if older than 3 days

2440.7k](/packages/alekseon-module-cleanrunningjobs)

PHPackages © 2026

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