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

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

nedal-network/php-calendar
==========================

A simple PHP class to generate calendars.

v1.0.1(1y ago)09MITPHPPHP &gt;=8.0

Since Oct 11Pushed 1y agoCompare

[ Source](https://github.com/nedal-network/php-calendar)[ Packagist](https://packagist.org/packages/nedal-network/php-calendar)[ Docs](https://github.com/nedal-network/php-calendar)[ RSS](/packages/nedal-network-php-calendar/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (5)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 to **PHP 8.1+***

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

[](#installation-via-composer)

You can now install this class via composer.

```
$ composer require nedal-network/php-calendar

```

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

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

use NedalNetwork\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();

    # 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 ship with both **English** and **Spanish** translations, with more coming soon. Alternatively, you can add your own custom string translations for both the days and months using the following:

```

    # This will set up the days - simply copy/paste the code below and replace the Spanish initials and full-day names with your own. (NB - Leave the keys in English)
    $calendar->setDays([
        'sunday' => [
        	'initials' => 'D',
        	'full' => 'Domingo'
        ],
        'monday' => [
        	'initials' => 'L',
        	'full' => 'Lunes',
        ],
        'tuesday' => [
        	'initials' => 'M',
        	'full' => 'Martes',
        ],
        'wednesday' => [
        	'initials' => 'X',
        	'full' => 'Miércoles',
        ],
        'thursday' => [
        	'initials' => 'J',
        	'full' => 'Jueves',
        ],
        'friday' => [
        	'initials' => 'V',
        	'full' => 'Viernes',
        ],
        'saturday' => [
        	'initials' => 'S',
        	'full' => 'Sábado',
        ],
    ]);

    # To add custom month names, simply copy/paste the code below and replace the Spanish month names with your own strings. (NB - Leave the keys in English)
    $calendar->setMonths([
        'january' => 'Enero',
        'february' => 'Febrero',
        'march' => 'Marzo',
        'april' => 'Abril',
        'may' => 'Mayo',
        'june' => 'Junio',
        'july' => 'Julio',
        'august' => 'Agosto',
        'september' => 'Septiembre',
        'october' => 'Octubre',
        'november' => 'Noviembre',
        'december' => 'Diciembre'
    ]);
```

If you want to help with translations, use the code in the **useSpanish()** method as a guide, and open a pull-request.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance37

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 58.5% 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 ~5 days

Total

2

Last Release

578d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1454bee0871ca3b2b52e5d05d6205d30180935ba5302f9d35d36f0156a031342?d=identicon)[yrpn](/maintainers/yrpn)

---

Top Contributors

[![benhall14](https://avatars.githubusercontent.com/u/17323507?v=4)](https://github.com/benhall14 "benhall14 (31 commits)")[![GeoSot](https://avatars.githubusercontent.com/u/22406063?v=4)](https://github.com/GeoSot "GeoSot (13 commits)")[![Pony2001](https://avatars.githubusercontent.com/u/116486946?v=4)](https://github.com/Pony2001 "Pony2001 (3 commits)")[![yrpn](https://avatars.githubusercontent.com/u/27211780?v=4)](https://github.com/yrpn "yrpn (2 commits)")[![pascalchevrel](https://avatars.githubusercontent.com/u/454375?v=4)](https://github.com/pascalchevrel "pascalchevrel (1 commits)")[![nazaralwi](https://avatars.githubusercontent.com/u/37035339?v=4)](https://github.com/nazaralwi "nazaralwi (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)")

---

Tags

timedatecalendarcalendars

### Embed Badge

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

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

###  Alternatives

[league/period

Time range API for PHP

7335.4M21](/packages/league-period)[aeon-php/calendar

PHP type safe, immutable calendar library

2079.7M16](/packages/aeon-php-calendar)[benhall14/php-calendar

A simple PHP class to generate calendars.

9822.6k](/packages/benhall14-php-calendar)

PHPackages © 2026

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