Laravel Carbon получает следующее вхождение определенной даты от текущей даты - PullRequest
0 голосов
/ 24 января 2019

Использование Carbon с laravel 5.6.

Я хочу написать код, который даст мне следующее вхождение даты от текущей даты.

Eg. Дать следующую дату 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();
}
?>

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Carbon обеспечивает приятный и свободный интерфейс для такого рода вещей.

Вы можете 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();
}
0 голосов
/ 24 января 2019
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();
}
0 голосов
/ 24 января 2019

это похоже на следующий день рождения.

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');
...