shahruslan / production-calendar
生产日历
1.0.0
2024-04-13 19:51 UTC
Requires
- php: ^8.1
- php-http/client-common: ^2.7
- php-http/discovery: ^1.19
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
README
描述
production-calendar 库允许从 production-calendar.ru 服务获取生产日历数据。
使用方法
为了使用此库,需要通过 Composer 安装它
composer require shahruslan/production-calendar
接下来需要连接一个 PSR-18 兼容的 http-client。这个客户端会自动连接,但如果需要,你也可以配置它并传递给构造函数。最后,我们获取用于 API 操作的 令牌。要获取令牌,只需提供你的电子邮件地址,系统会发送包含令牌的邮件。然后可以使用 Calendar
类来获取生产日历数据
use Shahruslan\ProductionCalendar\Calendar; $calendar = new Calendar('your-token'); // Получение календаря на весь год $calendarForYear = $calendar->getPeriodForYear(2024); // Получение календаря на определённый месяц $calendarForMonth = $calendar->getPeriodForMonth(2024, 1); // Получение календаря на определённый день $calendarForDay = $calendar->getPeriodForDay(new DateTime('2024-01-01'));
Calendar
类的方法
getPeriodForYear(int $year): Period
- 获取整年的日历;getPeriodForQuarter(int $year, int $quarter): Period
- 获取特定季度的日历;getPeriodForMonth(int $year, int $month): Period
- 获取特定月份的日历;getPeriodForDay(DateTimeInterface $date): Period
- 获取特定日期的日历;getPeriod(string $period): Period
- 获取任意时间段(不超过一年)的日历。
每个方法都返回一个包含生产日历数据的 Period
类对象。
Period
类
Period
类代表一个包含生产日历数据的对象。其 days
属性是一个包含类型为 Day
的对象的数组,具有以下属性
date
- 当前日期;type
- 日期类型(节日、工作日、周末等);weekDay
- 周几;workingHours
- 工作时长。
statistic
属性显示指定期间的统计数据
calendarDays
– 期间内的日历天数;calendarDaysWithoutHolidays
- 期间内的日历天数(不考虑节假日),(对于计算员工休假时长很有用);workDays
– 期间内的工作日数量;weekends
– 期间内的周末天数(不考虑节假日);holidays
– 期间内的节日天数;workingHours
– 期间的工作时长。
use Shahruslan\ProductionCalendar\Calendar; $calendar = new Calendar('your-token'); $period = $calendar->getPeriod('08.01.2024-10.01.2024', region: 23); print_r($period);
输出
Shahruslan\ProductionCalendar\Entity\Period Object
(
[country] => Shahruslan\ProductionCalendar\Entity\Dictionary\Country Object
(
[code] => ru
[text] => Российская Федерация
)
[region] => Shahruslan\ProductionCalendar\Entity\Dictionary\Region Object
(
[number] => 23
[text] => Краснодарский край
)
[dateStart] => DateTimeImmutable Object
(
[date] => 2024-01-07 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[dateEnd] => DateTimeImmutable Object
(
[date] => 2024-01-09 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[workWeekType] => 5-и дневная рабочая неделя
[period] => Произвольный период
[days] => Array
(
[0] => Shahruslan\ProductionCalendar\Entity\Day Object
(
[date] => DateTimeImmutable Object
(
[date] => 2024-01-07 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
(
[name] => publicHoliday
[value] => Государственный праздник
)
[weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
(
[name] => sunday
[value] => вс
)
[workingHours] => 0
)
[1] => Shahruslan\ProductionCalendar\Entity\Day Object
(
[date] => DateTimeImmutable Object
(
[date] => 2024-01-08 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
(
[name] => publicHoliday
[value] => Государственный праздник
)
[weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
(
[name] => monday
[value] => пн
)
[workingHours] => 0
)
[2] => Shahruslan\ProductionCalendar\Entity\Day Object
(
[date] => DateTimeImmutable Object
(
[date] => 2024-01-09 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
(
[name] => workingDay
[value] => Рабочий день
)
[weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
(
[name] => tuesday
[value] => вт
)
[workingHours] => 8
)
)
[statistic] => Shahruslan\ProductionCalendar\Entity\Statistic Object
(
[calendarDays] => 3
[calendarDaysWithoutHolidays] => 1
[workDays] => 1
[weekends] => 0
[holidays] => 2
[workingHours] => 8
)
)
额外设置
如果需要,可以获取特定地区的生产日历。例如,在2024年5月14日,克拉斯诺达尔边疆区的俄罗斯复活节纪念日,这一天被宣布为休息日。
$calendar = new Shahruslan\ProductionCalendar\Calendar('token'); $data = $calendar->isWorkingDay(new DateTimeImmutable('14.05.2024')); var_dump($data); $data = $calendar->setRegion(23)->isWorkingDay(new DateTimeImmutable('14.05.2024')); var_dump($data);
输出
bool(true) bool(false)
除了地区,还可以设置其他参数
new Calendar( 'token', isSixDayWeek: true, // включить учет по 6-ти дневной рабочей неделе isWeekendsOfSchrodinger: true, // учитывать ли так называемые нерабочие дни с сохранением заработной платы, которые начали практиковать с 2020 года (В период пандемии COVID-19) compact: true, // будут выводиться только особые дни, которые отличаются от обычного календаря );