PHP

时间:2019-02-25 02:04:53

标签: php conditional intervals period

我正在创建一个针对公司(位于刚果)的PHP应用程序,最终帮助他们管理员工及其身份。

法律部分按优先级分为三个部分:劳动法规,集体协议,程序规则。

对我来说,最困难的部分是写法律,协议和程序规则的“条件期限”。例如,关于定期合同的试用期:

法律和集体协议规定:

  
      
  • 从0到6个月,试用期为15天。
  •   
  • 以上,试用期为1个月。
  •   

公司的内部规则规定:

  
      
  • 对于第1到第6类,试用期为5天。
  •   
  • 对于7至8类,试用期为10天。
  •   
  • 对于9至12类,试用期为15天。
  •   

在此典型示例中,内部规则根据不同于法律的条件陈述某些内容。我很难编写一个可以存储条件类型(持续时间或类别),时间间隔(从x天/月/年到y天/月/年,或从类别xy),结果(持续时间以天/月/年为单位)。

在我的v1中,我有这个:

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

使用strtotime转换日期字符串,事实证明这很难使用。

我正在考虑类似DatePeriod PHP类的东西,而不是日期,我会使用DateInteval作为间隔(从xy),但不确定如果这是最好的方法。有没有更好的解决方案?

2 个答案:

答案 0 :(得分:1)

我认为您应该将此问题视为两个单独的问题:

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

根据我的经验,Period是实现部分的出色库。但是,我有一种直觉,那就是这可能不是制定和跟踪原始规则的最佳方法。

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

答案 1 :(得分:0)

最后,我编写了一个作曲家程序包:max13/conditional-period

这比我想象的要简单。