我想编写一个函数,根据给定的日期获取合同终止的日期($end_date).

条件是:

在合同签订后的前3个月,我们有宽限期.因此,如果我们在前3个月结束前14天收到合同辞职,合同期限将不适用,合同终止有效期至合同创建后前3个月的最后几天有效.

如果宽限期结束,合同期限将适用,因此,只有当我们在合同期限结束前6个月收到辞呈时,辞职才有效.如果我们在合同期限结束前6个月后收到辞职,合同将续签相同的合同期限.

我有这样的信息:

$resignation_date =  date('Y-m-d', strtotime($letter_of_resignation_received_date));

$contract_begin_date = date('Y-m-d', strtotime($contract_begin_date));

$contract_duration= 48; //This means 48 Months

1.条件:

  • 如果$RESIGNMENT_DATE在$CONTRACT_BEGIN_DATE之后的前3个月结束前14天
  • 结果:$END_DATE将是$CONTRACT_BEGIN_DATE+3个月($CONTRACT_DATION将不适用)
$grace_periode_date= date('Y-m-d', strtotime($contract_begin_date . ' + 3 months - 14 days'));

if ($resignation_date \< $grace_periode_date ) {
$end_date = date('Y-m-d', strtotime($contract_begin_date . ' + 3 months'));
}
  1. 条件:
  • 如果$RESIGNMENT_DATE在$CONTRACT_BEGIN_DATE之后的前3个月结束前14天之后,则将应用$CONTRACT_DATION.
  • 结果:$END_DATE将是$CONTRACT_BEGIN_DATE+$CONTRACT_DATION月

    if ($resignation_date > $grace_periode_date ) {
      $end_date = date('Y-m-d', strtotime($contract_begin_date . ' + '.$contract_duration.' months'));
    }

  1. 条件:
  • 如果宽限期没有了,我们在合同期限结束前6个月就收到了辞呈,那么合同已经续签了同样的期限.
  • 结果:$END_DATE将是$CONTRACT_BEGIN_DATE+($CONTRACT_DATION*2)个月

if ($resignation_date \> $grace_periode_date && $resignation_date \> date('Y-m-d', strtotime($contract_begin_date . ' + '.$contract_duration.' months - 6 months'))) {
$end_date = date('Y-m-d', strtotime($contract_begin_date . ' + '.$contract_duration.' months + '.$contract_duration.' months '));
}

所有这些都运行得很好.问题是,如果合同是自动续签2次,那么我这样做的方式是不正确的.IM始终基于$CONTRACT_BEGIN_DATE+新持续时间.

所以如果合同已经续签了2次的话.第三名.条件将提供错误的日期.因为我没有最后一次续签的日期,我只有合同的开始日期和合同的期限.

我如何才能仅使用我拥有的信息获得正确的结束日期?

推荐答案

您需要计算合同period的开始时间,在该合同中您将收到合同辞职.

function getContractPeriodStart($constractStartDate, $contractDurationInMonths, $targetDate)
{
    $periodEnd = strtotime($constractStartDate);
    do {
        $periodStart = $periodEnd;
        $periodEnd   = strtotime(date('Y-m-d', $periodStart) .   
                                 ' +' . $contractDurationInMonths . ' months');
    } while ($periodEnd < strtotime($targetDate));
    $return date('Y-m-d', $periodStart);
}

这里的$targetDate是你收到辞呈的日期.

idea 很简单:只需向前走一遍合同期限,直到一个期限的结束超过了你感兴趣的日期.

在此之后,您可以在第三个条件中使用期间的开始,而不是合同的开始.

Note:代码未经测试,可能包含错误.

Php相关问答推荐

从产品中获取WooCommerce产品属性单选按钮的列表WP_Query

Symfony Api平台:按自定义实体方式排序结果

WooCommerce/WordPress:简单的产品属性显示

无法在WooCommerce中发送客户笔记邮箱通知

闭包绑定$This和垃圾收集器

在冲突和几何上插入的Postgres参数化查询在PHP中不起作用

WooCommerce-在选定类别中每消费X个金额即可添加免费礼物

按列值将二维数组排序为不超过N个的递增组

如何使用定制的StateProvider设置JsonLd@上下文?

强制客户在注册时 Select WooCommerce角色

隐藏WooCommerce管理子菜单;主页;来自store 经理

从 XAMPP 运行 shell 脚本时,意外标记(附近出现语法错误

计算添加到购物车的点击次数并将其显示在 WooCommerce 管理产品列表中

使用 wp_footer 挂钩添加一些 CSS 不起作用

正则表达式将文本替换为标签 html 以字符开头

在 WooCommerce wc_get_products 函数中处理自定义分类法

为WooCommerce中的运输方式ID设置必填的 checkout 订单备注字段

PHP:如何将多列sql查询结果转换成数组

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)