Laravel Carbon从当前日期开始获取特定日期的下一次出现

时间:2019-01-24 13:09:05

标签: php laravel datetime php-carbon

在laravel 5.6中使用Carbon。

我想编写一个代码,该代码可以让我从当前日期开始下次出现日期。

例如,给出下一个5月31日的日期

方案1:
输入:$ currentDate = '01 -30-2019'; // MM-DD-YYYY格式
预期输出:$ next31May = '05 -31-2019';

场景2:
输入:$ currentDate = '07 -04-2019'; // MM-DD-YYYY格式
预期输出:$ next31May = '05 -31-2020';

更新:

我尝试了以下代码,但不满意

<?php
public function nextOccurance()
{
    $now = Carbon::now();
    $month= $now->month;
    $year = $now->year;
    if($month > 6)
    {
         echo Carbon::createMidnightDate($year+1, 5, 31);
    }
    else
    {
        echo Carbon::createMidnightDate(null, 5, 31);
    }
    exit();
}
?>

先谢谢您。

4 个答案:

答案 0 :(得分:0)

这就像下个生日。     

class Test
{
    public static function getNextBirthday($date)
    {
        // set birthday from current year
        $date = Carbon::createFromFormat('m-d-Y', $date);
        $date->year(Carbon::now()->year);

        // diff from 31 may to now
        // its negative than add one year, otherwise use the current
        if (Carbon::now()->diffInDays($date, false) >= 0) {
            return $date->format('m-d-Y');
        }

        return $date->addYear()->format('m-d-Y');
    }
}

echo Test::getNextBirtday('05-31-1990');

答案 1 :(得分:0)

public function nextOccurance()
{
    // the 31th of May of the current year
    $day = Carbon::createFromFormat('m-d', '05-31');
    $now = Carbon::now();
    // If today after $day
    if($now >= $day) {
       // Gat a next year
       $day->modify('next year');
    }

    echo $day->format('Y-m-d');
    exit();
}

答案 2 :(得分:0)

我希望这可以帮助您解决已知问题。

    $event = Carbon::parse('31 May');

    if (Carbon::now() >= $event){
       $nextEvent  = $event->addYear();
    } else {
       $nextEvent  = $event;
    }

    echo $nextEvent->format('m-d-Y');

答案 3 :(得分:-2)

碳素为这类东西提供了一个很好的界面。

您可以lastOfMonth()获取月份的最后一天。要添加年份,您可以添加addYear(1)

  $now = Carbon::now();
    $month= $now->month;
    $year = $now->year;
    if($month > 6)
    {
         echo $now->addMonth(5)->lastOfMonth();
    }
    else
    {
        echo $now->addYear(1);
    }
    exit();
}