【问题标题】:Expired date calculation过期日期计算
【发布时间】:2013-09-04 10:16:29
【问题描述】:

我在网站上找到了以下代码来计算到期日。此功能似乎在实际日期工作,并根据 $months 为我提供截止日期。我如何使用该功能,但要基于我定义的日期。所以意思是,如果我输入 $myday = 2013-01-01,我希望函数告诉我它是每个月到期的(如果我当然选择每月)以及与今天日期相比它的到期天数。因此,例如,如果我们是 2015 年 1 月 31 日并且我启动了该功能,它应该告诉我到期日是 1 天,因为它是每个月的到期日。

function calculate_postpone_due_date($billingcycle) {
    switch ($billingcycle) {
        case "Monthly":
            $months = 1;
            break;
        case "Quarterly":
            $months = 3;
            break;
        case "Semi-Annually":
            $months = 6;
            break;
        case "Annually":
            $months = 12;
            break;
        case "Biennially":
            $months = 24;
            break;
        case "Triennially":
            $months = 36;
            break;
        default:
            $months = 0;
            break;
    }

    if ($months == 0) {
        return false;
    }

    $today         = date('Y-m-d');
    $next_due_date = strtotime($today . ' + ' . $months . ' Months');

    return date('Y-m-d', $next_due_date);
}

【问题讨论】:

  • 在函数中添加一个日期参数,然后将传递给strtotime的日期替换为该参数。
  • 这是课程的一部分吗?如果有,它叫什么名字?
  • 所以你希望函数返回字符串“Monthly”和整数 1,我读对了吗?
  • 实际上,这并不是我真正需要的。假设我每个月都有一笔付款,这发生在 2001 年 1 月 1 日。所以从那个日期起每个月我都有一笔定期付款。但是当我在 2013-09-04 时,下一个重复日期应该是 2013-10-10。那么如何将其作为答案呢?

标签: php date


【解决方案1】:

添加了新参数$date。如果你通过$date 参数,它会在今天得到。

function calculate_postpone_due_date($billingcycle, $date = false)
{
    switch($billingcycle)
    {
        case "Monthly":         $months = 1; break;
        case "Quarterly":       $months = 3; break;
        case "Semi-Annually":   $months = 6; break;
        case "Annually":        $months = 12; break;
        case "Biennially":      $months = 24; break;
        case "Triennially":     $months = 36; break;
        default:                $months = 0; break;
    }


    if ($months == 0)
        return FALSE;    

    $current = $date ? date('Y-m-d', strtotime($date)) : date('Y-m-d');
    $next_due_date = strtotime($current.' + '.$months.' Months');
    return date('Y-m-d', $next_due_date);
}

echo calculate_postpone_due_date("Quarterly", "2013-01-01");

2013-01-01 的输出

2013-04-01

【讨论】:

  • 实际上,这并不是我真正需要的。假设我每个月都有一笔付款,这发生在 2001 年 1 月 1 日。所以从那个日期起每个月我都有一笔定期付款。但是当我在 2013-09-04 时,下一个重复日期应该是 2013-10-10。那么如何将其作为答案呢?
  • @seby calculate_postpone_due_date("Monthly", "2013-09-04"); 结果是 2013-10-04。我无法完全理解你想要什么。请给我更详细的例子吗?
  • 您好,先生,假设您从 2001 年 1 月 1 日开始定期支付 100 美元。然后从那天起每个月我都需要一种提醒。所以答案是从今天开始,下一个付款日期是什么时候。下个月的第一天。不知道我说清楚了吗?
  • @seby 可以说:2001-01-01 是第一个付款日。下个月2001-02-01 是吗?我知道你只有第一次约会,比如2001-01-01。您的问题是如何在12 years later ;) 之后获得此计费日期?对?您可以更新付款行created 2001-01-01updated 2001-02-01。每个月,您可以获得updated 列然后使用updated column 运行函数。
  • 你的意思是,每次运行函数时,我都会用新的日期更新列?但该功能不一定会在正确的日子运行。我该如何管理?
【解决方案2】:

尝试在函数中发送日期然后它会起作用看看下面的代码希望有用

function calculate_postpone_due_date($billingcycle,$date)
{
switch($billingcycle)
{
    case "Monthly":         $months = 1; break;
    case "Quarterly":       $months = 3; break;
    case "Semi-Annually":   $months = 6; break;
    case "Annually":        $months = 12; break;
    case "Biennially":      $months = 24; break;
    case "Triennially":     $months = 36; break;
    default:                $months = 0; break;
}


if ($months == 0)
    return FALSE;    

$today = $date;
$next_due_date = strtotime($today.' + '.$months.' Months');
return date('Y-m-d', $next_due_date);

}
echo  calculate_postpone_due_date($billingcycle,'your date')

【讨论】:

  • 实际上,这并不是我真正需要的。假设我每个月都有一笔付款,这发生在 2001 年 1 月 1 日。所以从那个日期起每个月我都有一笔定期付款。但是当我在 2013-09-04 时,下一个重复日期应该是 2013-10-10。那么如何将其作为答案呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多