【发布时间】:2016-09-04 01:24:45
【问题描述】:
有一个账单支付方式,账单设置直接扣款,分期可能不同:30/60/90天,30/45/60,15/30/45等等,如何准确获取分期付款日期?
这是我目前所拥有的,但它不适用于例如 30/45/60 或 15/45/75:
$dates = [];
$invoiceDate = explode('-', $invoiceDate); // yyyy-mm-dd Generation date
foreach ($installments as $i => $installment) { // e.g.: $installment = [30, 45, 60]
if ($installment % 30 == 0) {
$month = round($installment / 30);
$date = mktime(0, 0, 0, $invoiceDate[1] + $month, $invoiceDate[2], $invoiceDate[0]);
}
else {
$month = 0;
if ($installment > 30 && count($installments) > 1) {
$month = floor($installment / 30);
$installment = abs($installment - ($month * 30));
}
$monthOffset = 30 - date('t', mktime(0, 0, 0, $invoiceDate[1] + $month, 1, date('Y')));
$date = mktime(0, 0, 0, $invoiceDate[1] + $month, (int)$invoiceDate[2] + (int)$installment - $monthOffset, $invoiceDate[0]);
}
$dates[] = date('Y-m-d', $date);
}
使用此代码,如果我必须在 2016 年 4 月 15 日结算,则 30/60/90 之类的付款有效,返回这些付款日期:
15/05/2016 15/06/2016 2016 年 7 月 15 日
但是,不适用于 15/45/75 之类的付款:
30/04/2016 31/05/2016(应该是 30) 2016 年 6 月 30 日
也不是 30/45/60:
15/05/2016 31/05/2016(应该是 30) 15/06/2016
如果账单是在 2016 年 4 月 30 日完成的,则此付款有效:30/45/60
30/05/2016 15/06/2016 2016 年 6 月 30 日
75 年 15 月 45 日也是如此:
15/05/2016 15/06/2016 2016 年 7 月 15 日
还有 30/60/90:
30/05/2016 2016 年 6 月 30 日 2016 年 7 月 30 日
知道如何实现一个考虑所有可能性的算法吗?
【问题讨论】:
-
我认为您的示例甚至不起作用,因为几个月不都是 30 天?
-
@JonStirling 我正在使用一个月的偏移量来尝试解决它。
标签: php algorithm formula billing invoice