我需要得到一个下个月付款日期正确。所以我取了最后一个到期日期,再加上一个月。我该怎么做呢?
我的例子是:最后一次付款是1月31日,我在做
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)
它起作用了,它提供了2018-02-28
,但在那之后,下一次付款将在28号再次到期。所以我需要在添加一个月之后设置一个日期。
Carbon::create(2018, 2, 28, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
它给出了2018-03-31
,这很好,但是如果我在第一个示例中使用这个公式
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
它给了我溢出的2018-03-03
。这就是我的问题。我该怎么办?有没有像->setDayNoOverflow(31)
这样的东西?
发布于 2018-07-12 13:35:31
您不应使用上次付款日期,而应保留第一个日期,并从第一个日期开始计算所有其他日期,而不是前一个日期:
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)
假设你没有这个数据,你仍然可以:
$day = 31;
$date = Carbon::create(2018, 1, 28, 0, 0, 0);
$date->addMonthsNoOverflow(1);
$date->day(min($day, $date->daysInMonth));
发布于 2020-12-23 18:26:54
您可以将其用作循环
// from month
$min = 3;
// to mont
$max = 9;
// all dates
$paymentDates = [];
$date2 = \Carbon\Carbon::now();
// next day (or today)
$day = $date2->addDay(1)->format('d');
$currentMonth = $date2->format('m');
$year = $date2->format('Y');;
$date = \Carbon\Carbon::now();
$nextMonth = $currentMonth;
for($i = $min; $i <= $max; $i++) {
$date = \Carbon\Carbon::create($year, $currentMonth, $day)->addMonthsNoOverflow($nextMonth)->format('d/m/Y');
// add to array
array_push($paymentDates, $date);
// next month
$nextMonth++;
}
发布于 2018-07-12 14:16:50
您可以使用Carbon Library中提供的addMonth()函数,如下所示
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonth();
https://stackoverflow.com/questions/51295911
复制相似问题