我有以下功能,它应该只添加开始日期的周数并返回结束日期,但是我的错误结束日期大于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
答案 0 :(得分: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天。
我希望它有所帮助。
答案 1 :(得分:0)
首先,您需要了解开始日期和第一个截止日期之间的差异 - 这是24个月内计算的第一个吗?如果是这样,那么您希望该术语实际上是23个月吗? 24 weeks after 30/05/2013 is indeed 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"