garkavenkov / calendar
日历
0.7.3
2024-03-11 20:12 UTC
README
日历
安装
使用 Composer
composer require garkavenkov/calendar
使用方法
初始化
use Garkavenkov\Calendar\Calendar; $cldr = new Calendar();
此代码根据当前日期创建日历。如果您需要创建特定月份和年份的日历,请将参数传递给类构造函数
$cldr = new Calendar(year: 2022, month: 10);
默认情况下,日历从周日开始一周。如果您需要从周一开始一周,请将下一个参数传递给类构造函数
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true);
您还可以设置日期和月份名称的语言。为此,您需要将额外的参数传递给构造函数
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true, lang: 'ua');
日历结构
要获取日历,请使用以下命令
$cldr = new Calendar(year: 2022, month: 10, week_begins_on_monday:true, lang: 'ua'); $cal = $cldr->get(); print_r($cal);
日历具有以下结构
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] => Листопад
)
)
)
)
)
方法
getCalendarBoundaries($format)
如果您需要获取日历的第一天和最后一天,请使用以下代码
$boundaries = $cal->getCalendarBoundaries($format = null); print_r($boundaries);
此方法返回一个包含日历开始和结束日期的数组
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] => Листопад
)
)
您可以将 $format 变量传递到方法中。
$boundries = $cal->getCalendarBoundaries('Y-m-d');
使用此格式的方法将返回包含格式化日期的数组
Array
(
[0] => 2022-26-09
[1] => 2022-06-11
)
getMonthBoundaries($format = null)
getMonthBoundaries() 方法返回一个包含日历月份第一天和最后一天的数组
$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] => Жовтень
)
)
同样,您可以将 $format 变量传递给方法,并获取格式化日期
$boundries = $cal->getMonthBoundaries('Y-m-d');
Array
(
[0] => 2022-10-01
[1] => 2022-10-31
)
getWeekdays()
getWeekdays() 方法返回一个包含一周中天名称的数组
$days = $cal->getWeekdays(); print_r($days);
Array
(
[0] => Понеділок
[1] => Вівторок
[2] => Середа
[3] => Четвер
[4] => П`ятниця
[5] => Субота
[6] => Неділя
)
getMonths()
getMonths() 方法返回一个包含月份名称的数组
$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)
此方法允许将数据注入到具有特定 $title 的某一天。例如,存在一组包含日期和一些信息(例如)的数据 $events
$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'],
);
....
以下代码将此数据集注入到标题为 todos 的日历中
$cal->injectIntoDay('todos', $events); print_t($cal->get());
输出
...
[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
)
)
)
...
您还可以传递 $array_function 来对 $events 中的数据集执行操作。
以下代码将 count 函数在数据集上执行的结果注入到标题为 todos 的日历中
$cal->injectIntoDay('todos', $events, 'count'); print_t($cal->get());
输出
...
[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()
此方法返回一个包含日历周数的数组
$numbers = $cal->getWeeksNumbers(); print_r($numbers);
输出
Array
(
[0] => 39
[1] => 40
[2] => 41
[3] => 42
[4] => 43
[5] => 44
)
getWeek(int $number)
此方法返回一个包含编号为 $number 的周数数组
$week = $cal->getWeek(40); print_r($week);
输出
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)
此方法返回一个包含关于日历的基本信息的数组,即月份、年份、日历和月份的边界
$info = $cal->getCalendarInfo(); print_r($info);
输出
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] => Жовтень
)
)
)
您可以将日历和月份的边界输出为特定格式。为此,您需要传递一个包含所需格式的参数
$info = $cal->getCalendarInfo(format: 'Y-m-d'); print_r($info);
输出
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)
此方法返回一个包含特定日期信息的数组
$day = $cal->getDay('2022-10-22'); print_r($day);
输出
Array
(
[0] => Array
(
[date] => 2022-10-22
[mday] => 22
[wday] => 6
[mon] => 10
[year] => 2022
[yday] => 294
[weekday] => Субота
[month] => Жовтень
)
)