1

我有以下函数,它应该只将周数添加到开始日期并返回结束日期,但是对于大于 20 的值,我得到错误的结束日期,

例如

开始日期='2013-05-30'
interval_term=24;

将返回为

结束日期:2013-11-07

功能如下,

public function calculateArrangementEndDate($interval_term=12,$start_date=false)
{
    $end_date=($start_date===false)?time():strtotime($start_date);
    return date("Y-m-d",($end_date+($interval_term-1)*3600*7*24));
}

但从 start_date 算起的正确 24 周是 2013-10-31

像这样

付款时间表:

Due Date       Amount
30/05/2013     $0.64
06/06/2013     $0.64
13/06/2013     $0.64
20/06/2013     $0.64
27/06/2013     $0.64
04/07/2013     $0.64
11/07/2013     $0.64
18/07/2013     $0.64
25/07/2013     $0.64
01/08/2013     $0.64
08/08/2013     $0.64
15/08/2013     $0.64
22/08/2013     $0.64
29/08/2013     $0.64
05/09/2013     $0.64
12/09/2013     $0.64
19/09/2013     $0.64
26/09/2013     $0.64
03/10/2013     $0.64
10/10/2013     $0.64
17/10/2013     $0.64
24/10/2013     $0.64
31/10/2013     $0.64 
4

2 回答 2

0

我虽然简单的方法是使用 strtotime 添加这 24 周而不是使用

$enddate = strtotime('2013-05-30 00:00:00 +24 weeks');
var_dump(date('Y-m-d H:i:s', $enddate));

将返回“2013-11-14 00:00:00”

如果您尝试使用 2 周进行简单测试,您将获得 2013-06-13 00:00:00 ,这正好多 14 天。

我希望它有所帮助。

于 2013-05-01T09:39:21.640 回答
0

首先,您需要了解您的开始日期和第一个截止日期之间的差异 - 第一个日期是否计入 24 个月?如果是这样,那么您是否希望该期限实际上是 23 个月?30/05/2013 之后的 24 周确实是 14/11/2013

您的付款计划中也只列出了 23 个日期(但从开始日期开始,如果有意义的话,不要将其用作第一个到期日)。

最后,我建议改用DateTime该类。这是一个例子:

public function calculateArrangementEndDate($interval_term=12,$start_date=false)
{
  $date = new DateTime($start_date);
  if (is_null($date)) {
    // throw exception or return false here
  }

  $date->add(new DateInterval('P' . $interval_term . 'W'));
  return $date->format("Y-m-d");
}

这将计算出日期的$interval_term几周$start_date- 前两点仍然存在。

var_dump(
  calculateArrangementEndDate(23, '2013-05-30')
);
// string(10) "2013-11-07" 
于 2013-05-01T09:44:16.927 回答