代码之家  ›  专栏  ›  技术社区  ›  Yevgeniy Afanasyev

设置下个月的付款日期(使用php carbon)

  •  4
  • Yevgeniy Afanasyev  · 技术社区  · 7 年前

    我需要下个月的付款日期。所以我选择最后一个截止日期 加上一个月。我该怎么做?

    我的例子是:上次付款是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) ?

    4 回复  |  直到 7 年前
        1
  •  4
  •   KyleK    7 年前

    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));
    
        2
  •  1
  •   Maxim Mazurok    7 年前

    public function setDaysNoOverflow($value)
        {
            $year = $this->year;
            $month = $this->month;
    
            $this->day((int)$value);
    
            if ($month !== $this->month) {
                $this->year = $year;
                $this->month = $month;
                $this->modify('last day of this month');
            }
    
            return $this;
        }
    

    Carbon/Carbon.php

    addMonthsNoOverflow

        3
  •  0
  •   Paul    7 年前

    $lastPayment->addMonthsNoOverflow(1)->day(
        min($paymentDue->day, $lastPayment->daysInMonth)
    );
    

        4
  •  -1
  •   Umang Patel    7 年前

    Carbon::create(2018, 1, 31, 0, 0, 0)->addMonth();