garkavenkov / calendar
Calendar
README
Calendar
Installation
Use Composer
composer require garkavenkov/calendar
Usage
Initialization
use Garkavenkov\Calendar\Calendar; $cldr = new Calendar();
This code creates calendar based on current date. If you need to create calendar on particular month and year, pass parameters to class constructor
$cldr = new Calendar(year: 2022, month: 10);
By default calendar creates with week begins on Sunday. If you need week begin on Monday, pass next parameter to class constructor
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true);
Also you can set language for day's and month's names. In this you need to pass additional parameter to constructor
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true, lang: 'ua');
Calendar structure
To get calendar use command:
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true, lang: 'ua'); $cal = $cldr->get(); print_r($cal);
The calendar has the following structure:
Array
(
[info] => Array
(
[weekDayNames] => Array
(
[0] => Понеділок
[1] => Вівторок
[2] => Середа
[3] => Четвер
[4] => П`ятниця
[5] => Субота
[6] => Неділя
)
[months] => Array
(
[0] => Січень
[1] => Лютий
[2] => Березень
[3] => Квітень
[4] => Травень
[5] => Червень
[6] => Липень
[7] => Серпень
[8] => Вересень
[9] => Жовтень
[10] => Листопад
[11] => Грудень
)
[month] => Array
(
[index] => 10
[name] => Жовтень
)
[year] => 2022
)
[weeks] => Array
(
[0] => Array
(
[number] => 39
[days] => Array
(
[0] => Array
(
[date] => 2022-09-26
[mday] => 26
[wday] => 1
[mon] => 9
[year] => 2022
[yday] => 268
[weekday] => Понеділок
[month] => Вересень
)
...
[6] => Array
(
[date] => 2022-10-02
[mday] => 2
[wday] => 0
[mon] => 10
[year] => 2022
[yday] => 274
[weekday] => Неділя
[month] => Жовтень
)
)
)
...
[5] => Array
(
[number] => 44
[days] => Array
(
...
[6] => Array
(
[date] => 2022-11-06
[mday] => 6
[wday] => 0
[mon] => 11
[year] => 2022
[yday] => 309
[weekday] => Неділя
[month] => Листопад
)
)
)
)
)
Methods
getCalendarBoundaries($format)
If you need to get calendar first and last day, use folowing code:
$boundaries = $cal->getCalendarBoundaries($format = null); print_r($boundaries);
This method returns an array of calendar start and end dates
Array
(
[0] => Array
(
[date] => 2022-09-26
[mday] => 26
[wday] => 1
[mon] => 9
[year] => 2022
[yday] => 268
[weekday] => Понеділок
[month] => Вересень
)
[1] => Array
(
[date] => 2022-11-06
[mday] => 6
[wday] => 0
[mon] => 11
[year] => 2022
[yday] => 309
[weekday] => Неділя
[month] => Листопад
)
)
You can pass $format variable into method.
$boundries = $cal->getCalendarBoundaries('Y-m-d');
With this format methods will return array with formated date
Array
(
[0] => 2022-26-09
[1] => 2022-06-11
)
getMonthBoundaries($format = null)
Method getMonthBoundaries()
returns array with first and last day of the calendar month
$boundries = $cal->getMonthBoundaries();
Array
(
[0] => Array
(
[date] => 2022-10-01
[mday] => 1
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 273
[weekday] => Субота
[month] => Жовтень
)
[1] => Array
(
[date] => 2022-10-31
[mday] => 31
[wday] => 1
[mon] => 10
[year] => 2022
[yday] => 303
[weekday] => Понеділок
[month] => Жовтень
)
)
Likewise getCalendarBoundaries()
you can pass a $format
variable to a method and get the formatted dates
$boundries = $cal->getMonthBoundaries('Y-m-d');
Array
(
[0] => 2022-10-01
[1] => 2022-10-31
)
getWeekdays()
Method getWeekdays()
returns an array containing the names of the days of the week.
$days = $cal->getWeekdays(); print_r($days);
Array
(
[0] => Понеділок
[1] => Вівторок
[2] => Середа
[3] => Четвер
[4] => П`ятниця
[5] => Субота
[6] => Неділя
)
getMonths()
Method getMonths()
returns an array containing the names of the months.
$months = $cal->getMonths(); print_r($months);
Array
(
[0] => Січень
[1] => Лютий
[2] => Березень
[3] => Квітень
[4] => Травень
[5] => Червень
[6] => Липень
[7] => Серпень
[8] => Вересень
[9] => Жовтень
[10] => Листопад
[11] => Грудень
)
injectIntoDay(string $title, array $events, string $array_function)
This method allows to inject data into a day with particular $title
. For example, there is a set of data $events
containing date and some information e.g.
$events = array(
['date' => '2022-10-01', 'name' => 'todo1'],
['date' => '2022-10-01', 'name' => 'todo2'],
['date' => '2022-10-02', 'name' => 'todo1'],
['date' => '2022-10-02', 'name' => 'todo2'],
['date' => '2022-10-02', 'name' => 'todo3'],
);
....
Following code will inject this dataset into calendar with title todos
$cal->injectIntoDay('todos', $events); print_t($cal->get());
output
...
[5] => Array
(
[date] => 2022-10-01
[mday] => 1
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 273
[weekday] => Субота
[month] => Жовтень
[todos] => Array
(
[0] => Array
(
[date] => 2022-10-01
[name] => todo1
)
[1] => Array
(
[date] => 2022-10-01
[name] => todo2
)
)
)
[6] => Array
(
[date] => 2022-10-02
[mday] => 2
[wday] => 0
[mon] => 10
[year] => 2022
[yday] => 274
[weekday] => Неділя
[month] => Жовтень
[todos] => Array
(
[0] => Array
(
[date] => 2022-10-02
[name] => todo1
)
[1] => Array
(
[date] => 2022-10-02
[name] => todo2
)
[2] => Array
(
[date] => 2022-10-02
[name] => todo3
)
)
)
...
It is also possible to pass $array_function
to perform operation with dataset in $events
.
Following code will inject this result of count
function performed on dataset into calendar with title todos
$cal->injectIntoDay('todos', $events, 'count'); print_t($cal->get());
output
...
[5] => Array
(
[date] => 2022-10-01
[mday] => 1
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 273
[weekday] => Субота
[month] => Жовтень
[todos] => 2
)
[6] => Array
(
[date] => 2022-10-02
[mday] => 2
[wday] => 0
[mon] => 10
[year] => 2022
[yday] => 274
[weekday] => Неділя
[month] => Жовтень
[todos] => 3
)
...
getWeeksNumbers()
This method returns an array containing calendar's weeks numbers.
$numbers = $cal->getWeeksNumbers(); print_r($numbers);
output
Array
(
[0] => 39
[1] => 40
[2] => 41
[3] => 42
[4] => 43
[5] => 44
)
getWeek(int $number)
This method returns an array containing calendar's week by number $number
.
$week = $cal->getWeek(40); print_r($week);
output
Array
(
[1] => Array
(
[number] => 40
[days] => Array
(
[0] => Array
(
[date] => 2022-10-03
[mday] => 3
[wday] => 1
[mon] => 10
[year] => 2022
[yday] => 275
[weekday] => Понеділок
[month] => Жовтень
)
...
[6] => Array
(
[date] => 2022-10-09
[mday] => 9
[wday] => 0
[mon] => 10
[year] => 2022
[yday] => 281
[weekday] => Неділя
[month] => Жовтень
)
)
)
)
getCalendarInfo(string $dateFormat = null)
This method returns an array containing basic information about calendar, i.e. month, year, calendar's and month's boundries
$info = $cal->getCalendarInfo(); print_r($info);
output
Array
(
[year] => 2022
[month] => Array
(
[index] => 10
[name] => Жовтень
)
[calendarBoundaries] => Array
(
[0] => Array
(
[date] => 2022-09-26
[mday] => 26
[wday] => 1
[mon] => 9
[year] => 2022
[yday] => 268
[weekday] => Понеділок
[month] => Вересень
)
[1] => Array
(
[date] => 2022-11-06
[mday] => 6
[wday] => 0
[mon] => 11
[year] => 2022
[yday] => 309
[weekday] => Неділя
[month] => Листопад
)
)
[monthBoundaries] => Array
(
[0] => Array
(
[date] => 2022-10-01
[mday] => 1
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 273
[weekday] => Субота
[month] => Жовтень
)
[1] => Array
(
[date] => 2022-10-31
[mday] => 31
[wday] => 1
[mon] => 10
[year] => 2022
[yday] => 303
[weekday] => Понеділок
[month] => Жовтень
)
)
)
It is possible to output calendar's and month's boundries in particular format. To do this, you need to pass a parameter with the necessary format
$info = $cal->getCalendarInfo(format: 'Y-m-d'); print_r($info);
output
Array
(
[year] => 2022
[month] => Array
(
[index] => 10
[name] => Жовтень
)
[calendarBoundaries] => Array
(
[0] => 2022-09-26
[1] => 2022-11-06
)
[monthBoundaries] => Array
(
[0] => 2022-10-01
[1] => 2022-10-31
)
)
getDay(string $date)
This method returns an array containing particular day information
$day = $cal->getDay('2022-10-22'); print_r($day);
output
Array
(
[0] => Array
(
[date] => 2022-10-22
[mday] => 22
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 294
[weekday] => Субота
[month] => Жовтень
)
)