fastbolt/working-day-provider

PHP 包,用于简化两个日期之间工作日数量的计算。

v1.0.0 2023-04-14 06:35 UTC

This package is auto-updated.

Last update: 2024-09-14 09:48:44 UTC


README

Composer version

Code Climate maintainability Test Coverage

Type Coverage Psalm Level

Github Build

工作日提供者

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)