PHP 中的条件间隔周期

Conditional interval periods in PHP

我正在创建一个 PHP 面向公司(在刚果)的应用程序,最终帮助他们管理员工及其状态。

法律部分由三部分组成,按优先顺序排列:劳动法、集体协议、程序规则。

对我来说,最难的部分是编写法律、协议和程序规则中的 "conditional periods"。比如关于固定期限合同的试用期:

法律和集体协议规定:

  • From 0 to 6 months, the trial period is 15 days.
  • Above, the trial period is 1 month.

虽然公司的内部规则规定:

  • For categories 1 to 6, the trial period is 5 days.
  • For categories 7 to 8, the trial period is 10 days.
  • For categories 9 to 12, the trial period is 15 days.

在这个典型的例子中,内部规则根据与法律不同的条件陈述了一些事情。我很难写一个 class,我可以在其中存储一种条件(持续时间或类别)、间隔(从 x day/month/year 到 y day/month/year,或从类别 xy),结果(day/month/year 中的持续时间)。

在我的 v1 中,我有这个:

'ftc_trial_periods'  => [
    [
        'left' => 'duration',
        'intervals' => [0, '6 months'],
        'result' => '15 days',
    ],
    '1 months',
];

用strtotime转换日期字符串,结果好用

我正在考虑 DatePeriod PHP class 之类的东西,而不是日期,我会使用 DateInteval 作为间隔(从 x y) 但不确定这是否是最佳方法。在野外有更好的解决方案吗?

我认为你应该将其视为两个 单独的问题:

  1. 你如何方便地表示业务规则。
  2. 你如何实现基础日期计算。

根据我的经验 Period 是实现部分的优秀库。但是我有一种预感,它可能不是制定和跟踪原始 rules.

的最佳方法

有专门用于编写这样的业务逻辑的解决方案。不幸的是,我没有经验为您的案例提出具体建议。我想起了 Symfony ExpressionLanguage and Hoa Ruler.

最后写了一个composer包:max13/conditional-period

比我想象的要简单。