设置下个月的付款日期(使用PHP Carbon)

Yev*_*yev 5 php laravel php-carbon

我需要正确的下个月付款日期。因此,我要考虑最后的截止日期,并在其中加上一个月。我该怎么做?

我的例子是:上次付款是Januarry的31号,我在做

Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)
Run Code Online (Sandbox Code Playgroud)

它可以正常工作,但是给定了,2018-02-28但是下一次付款将在28日再次到期。因此,我需要在添加一个月后设置一个日期。

Carbon::create(2018, 2, 28, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
Run Code Online (Sandbox Code Playgroud)

它给我2018-03-31带来的好处,但是如果我在第一个示例中使用此公式

Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
Run Code Online (Sandbox Code Playgroud)

它给我溢出2018-03-03。这是我的问题。我该怎么办?有类似的东西->setDayNoOverflow(31)吗?

Kyl*_*leK 5

您不应使用最后一个付款日期,而应保留第一个日期,并从第一个日期(而不是前一个日期)计算所有其他日期:

Carbon::create(2018, 1, 31, 0, 0, 0)
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(2)
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(3)
Run Code Online (Sandbox Code Playgroud)

假设您没有此数据,您仍然可以:

$day = 31;
$date = Carbon::create(2018, 1, 28, 0, 0, 0);
$date->addMonthsNoOverflow(1);
$date->day(min($day, $date->daysInMonth));
Run Code Online (Sandbox Code Playgroud)