根据今天的日期确定下一个付款日期

时间:2017-05-16 14:53:43

标签: php mysql datetime

我的雇主在星期五每两周付款一次。

假设开始日期是4月14日。

以下付款日期为: 4月28日 5月12日 5月26日等等......

我希望能够以相对于CURDATE()的数据库的日期时间格式插入下一个支付日。

示例: 如果代码在5月22日运行,则条目为2017-05-26 00:00:00

如果代码在6月1日运行,则条目为2017-06-09 00:00:00

如果代码在支付日的同一天运行,它将恢复到下一个支付日。

同一天示例: 如果代码在6月9日运行,则条目为2017-06-23 00:00:00

我尝试过的事情:

更新

$StartDate = strtotime('2017-05-12'); //Start date from which we begin count
$CurDate = date("Y-m-d"); //Current date.
$NextDate = date("Y-m-d", strtotime("+2 week", $StartDate)); //Next date = +2 week from start date
$tomorrow = date('Y-m-d',strtotime($CurDate . "+1 days"));

if($CurDate == $NextDate){$CurDate = $tomorrow;}
while ($CurDate > $NextDate ) { 
  $NextDate = date("Y-m-d", strtotime("+2 week", strtotime($NextDate)));
}

echo date("Y-m-d", strtotime($NextDate)), "\n";

2 个答案:

答案 0 :(得分:1)

从今天开始接下来的星期五(即使今天是星期五):

echo date('Y-m-d', strtotime('next friday'));

从下一个星期五开始:

$start = strtotime('April 14');
echo date('Y-m-d', strtotime('next friday', $start));

要获得下周五加一周:

$start = strtotime('April 14');
echo date('Y-m-d', strtotime('next friday +1 week', $start));

有很多种可能性,或查看DateTime Class

答案 1 :(得分:1)

您的方法是正确的,唯一需要的是在数据库中存储最后一个付款日期,并根据此计算下一个,然后在执行代码时无关紧要,下一个付款日期是根据最新的计算的付款日期:

$nextPayDay = (clone $lastPayDay)->modify('Friday + 2 weeks');

如果代码在付款当天运行,请确保使用当前日期更新$lastPayDay