https://github.com/benhall14/php-calendar
A simple PHP class to generate calendars. Easy to populate, the calendar shows events by passing in an array.
https://github.com/benhall14/php-calendar
calendar calendars php
Last synced: 12 months ago
JSON representation
A simple PHP class to generate calendars. Easy to populate, the calendar shows events by passing in an array.
- Host: GitHub
- URL: https://github.com/benhall14/php-calendar
- Owner: benhall14
- License: mit
- Created: 2017-04-01T16:16:53.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2025-02-05T22:51:45.000Z (about 1 year ago)
- Last Synced: 2025-04-10T00:16:13.674Z (12 months ago)
- Topics: calendar, calendars, php
- Language: PHP
- Homepage: https://conobe.co.uk/projects/php-calendar/
- Size: 96.7 KB
- Stars: 82
- Watchers: 9
- Forks: 28
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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
You can now install this class via composer.
$ composer require benhall14/php-calendar
**Remember** to add the composer autoloader before using the class and use the correct namespace.
require 'vendor/autoload.php';
use benhall14\phpCalendar\Calendar as Calendar;
# Usage
Please make sure you have added the required classes.
#### Styling
You can apply styles in one of three ways:
1) Using $calendar->stylesheet() after you have initialised a calendar;
```php
$calendar = new Calendar;
$calendar->stylesheet();
```
2) Using the calendar.css (or calendar.min.css) from the css directory;
```html
```
3) Create your own stylesheet and add it to the head of your HTML document.
#### 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).
```php
(new Calendar)->display();
```
Or, you can break it down with full customisability:
```php
# 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(array(date('Y-m-d'))); # draw this months 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 ->useWeekView(). Remember, when adding events to a week-view calendar, you need to include the time too (see events above).
```php
$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 ->setTimeFormat method:
```php
$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
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'.
```php
$calendar = new Calendar;
$calendar->useMondayStartingDate();
$calendar->display(date('Y-m-d'), 'green');
```
#### Translated Calendars
We now use automatically from the date and the setLocale() method. If you use ->setLocale('fr_FR'), then the days and month names will be French. For more information on the Carbon localization, see https://carbon.nesbot.com/docs/#api-localization
# Credits
- [GeoSot](https://github.com/GeoSot)
# Requirements
**Carbon**
# License
Copyright (c) 2016-2022 Benjamin Hall, ben@conobe.co.uk
https://conobe.co.uk
Licensed under the MIT license
# Donate?
If you find this project helpful or useful in any way, please consider getting me a cup of coffee - It's really appreciated :)
[](https://paypal.me/benhall14)