garkavenkov/calendar

0.7.3 2024-03-11 20:12 UTC

This package is auto-updated.

Last update: 2024-09-11 21:17:44 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] => Жовтень
        )
)