fastbolt / working-day-provider
PHP 包,用于简化两个日期之间工作日数量的计算。
v1.0.0
2023-04-14 06:35 UTC
Requires
- php: ^7.4|^8.0|^8.1
- webmozart/assert: ^1.11
Requires (Dev)
- fastbolt/test-helpers: ^0.2.0
- fig-r/psr2r-sniffer: ^1.5
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.18.4
- slevomat/coding-standard: ^7.2.1
- spryker/code-sniffer: ^0.17.18
- squizlabs/php_codesniffer: ^3.7
- vimeo/psalm: ^5.9
README
工作日提供者
PHP 包,用于简化给定两个日期之间工作日数量的计算。
先决条件
目前,该包已在 PHP 7.4、8.0 和 8.1 上进行了测试。
安装
可以通过 composer 安装此库。
composer require fastbolt/working-day-provider
使用方法
基本使用
对于最基本的用法,您可以使用 WorkingDayProvider
而无需任何配置。
默认情况下,它不会使用任何应用程序或区域特定的假日,而只考虑周一至周五为工作日。
use Fastbolt\WorkingDayProvider\WorkingDayProvider; $workingDayProvider = new WorkingDayProvider(); $workingDays = $workingDayProvider->getWorkingDaysForPeriod( new DateTimeImmutable('2023-01-01'), new DateTimeImmutable('2023-01-07') ); // $workingDays will be 5
应用程序/区域特定假日
该库设计为将应用程序/区域特定假日作为“非工作日”包含在内。
为了做到这一点,您需要创建一个实现 Fastbolt\WorkingDayProvider\Holiday\HolidayProvider
接口的类。
唯一的接口方法 getHolidaysForDateRange
必须返回一个实现了 \Fastbolt\WorkingDayProvider\Holiday\Holiday
接口的对象数组。
use Acme\Provider\HolidayProvider; use Fastbolt\WorkingDayProvider\WorkingDayProvider; $holidayProvider = new HolidayProvider()); # Example `$holidayProvider->getHolidaysForDateRange(2022-12-24, 2022-12-26)` returns one holiday for 26th of december. $workingDayProvider = new WorkingDayProvider($holidayProvider); $workingDays = $workingDayProvider->getWorkingDaysForPeriod( new DateTimeImmutable('2022-12-24'), new DateTimeImmutable('2022-12-26') ); // $workingDays will be 0 (days are saturday, sunday and holiday)
自定义配置(尚未完全实现)
可选地,您可以向 WorkingDayProvider
构造函数提供自定义配置。
use Fastbolt\WorkingDayProvider\Configuration; use Fastbolt\WorkingDayProvider\WorkingDayProvider; $configuration = new Configuration(['excludeWeekDays' => [1, 6, 7]); $workingDayProvider = new WorkingDayProvider(null, $configuration); $workingDays = $workingDayProvider->getWorkingDaysForPeriod( new DateTimeImmutable('2022-12-24'), new DateTimeImmutable('2022-12-26') ); // $workingDays will be 0 (working days monday, saturday and sunday are all configured as non-working days)