max13/条件周期

ConditionalPeriod 是一个 PHP 类,允许存储两个数值/DateInterval 区间,结果得到一个 DateInterval。

v0.9.0 2022-08-06 22:53 UTC

This package is auto-updated.

Last update: 2024-09-07 03:33:55 UTC


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 或其字符串形式的数组

需要帮助?

打开一个问题。

现在请享受乐趣。