max13 / 条件周期
ConditionalPeriod 是一个 PHP 类,允许存储两个数值/DateInterval 区间,结果得到一个 DateInterval。
v0.9.0
2022-08-06 22:53 UTC
Requires
- php: ^8.0
- nesbot/carbon: ^2.0
Requires (Dev)
README
ConditionalPeriod 是一个 PHP 类,允许存储两个数值/DateInterval 区间,结果得到一个 DateInterval。
实际上,这是我正在工作的项目的一个要求。通常,它涉及到工作合同。以下是一个使用整数作为条件的示例
- 如果员工的 类别 在 1 到 5 之间,那么 提前通知 是 1 个月。
- 如果员工的 类别 在 6 到 7 之间,那么 提前通知 是 2 个月。
- 如果员工的 类别 在 8 到 12 之间,那么 提前通知 是 3 个月。
以下是一个使用日期区间作为条件的示例
- 如果 固定期限合同 持续 0 到 6 个月,那么 试用期 是 15 天。
- 超过 6 个月,试用期 是 1 个月。
使用 ConditionalPeriod 以条件表达这些区间非常简单,可以通过两种方式表达:在构造函数中使用 4 个参数,或者使用字符串语法。
安装
您可以使用 composer: composer require max13/conditional-period:^1.0
或者下载仓库并将文件(在 /src 中)添加到您的项目中。
使用方法
在构造函数中使用 4 个参数,也就是“经典实例化”
use Carbon\CarbonInterval; use MX\ConditionalCollection; use MX\ConditionalPeriod; ... $prior_notices = [ new ConditionalPeriod( ConditionalType::CATEGORY, 1, 5, CarbonInterval::make('1 month') ), new ConditionalPeriod( ConditionalType::CATEGORY, 6, 7, CarbonInterval::make('2 months') ), new ConditionalPeriod( ConditionalType::CATEGORY, 8, 12, CarbonInterval::make('3 months') ), ]; $prior_notices = ConditionalCollection::fromArray($prior_notices); $trial_periods = [ new ConditionalPeriod( ConditionalType::DURATION, CarbonInterval::make(0), CarbonInterval::make('6 months'), CarbonInterval::make('15 days') ), new ConditionalPeriod( ConditionalType::DURATION, CarbonInterval::make('6 months'), CarbonInterval::make('99 years'), // Equivalent to +∞ CarbonInterval::make('1 month') ), ]; $trial_periods = ConditionalCollection::fromArray($trial_periods);
使用简短字符串格式,也就是“酷炫模式”
use MX\ConditionalCollection; use MX\ConditionalPeriod; ... $prior_notices = [ new ConditionalPeriod('C1-5P1M'), new ConditionalPeriod('C6-7P2M'), new ConditionalPeriod('C8-12P3M'), ]; // OR $prior_notices = new ConditionalCollection; $prior_notices[] = new ConditionalPeriod('C1-5P1M'); $prior_notices[] = 'C6-7P2M'; $prior_notices[] = new ConditionalPeriod('C8-12P3M'); $trial_periods = [ new ConditionalPeriod('DP0DP6MP15D'), new ConditionalPeriod('DP6MP99YP1M') ]; // OR $trial_periods = ConditionalCollection::parse('DP0DP6MP15D,DP6MP99YP1M');
杂项
您可能已经注意到了,每个 CarbonInterval 参数都可以替换为其 ISO8601 持续时间规范(与您实例化 DateInterval 的方式相同),或者一个相对日期字符串(就像您可以使用 CarbonInterval 一样。
因此,以下是通过 ConditionalPeriod 构造函数输入 Carboninterval 的 5 种相同方式
Carboninterval::createFromDateString('1 year, 2 months, 3 days')Carboninterval::make('P1Y2M3D');new Carboninterval('P1Y2M3D');'1 year, 2 months, 3 days''P1Y2M3D'
还有 5 种创建 ConditionalCollection 的方式
ConditionalCollection::create(new ConditionalPeriod(…)),它实例化它并将其第一个值设置为 ();// 或者 ConditionalPeriod 字符串形式new ConditionalCollection,然后向其中添加:c->push(new ConditionalPeriod(…)); // 或者 ConditionalPeriod 字符串形式new ConditionalCollection,然后将其视为数组:$c[] = new ConditionalPeriod(…); // 或者 ConditionalPeriod 字符串形式ConditionalCollection::parse(…),它接受其自己的toString()形式ConditionalCollection::fromArray(…),它接受一个包含ConditionalPeriod或其字符串形式的数组
需要帮助?
打开一个问题。
现在请享受乐趣。