Если дата прошла в этом году, получите ее со следующего года - PullRequest
0 голосов
/ 09 мая 2018

Я использую Углерод для дат. Давайте возьмем 1 марта, например. По умолчанию Carbon возвращает 1 марта текущего года.

//Returns current year value
$date = Carbon::parse('first day of March');

Можно ли получить его определенно из будущего (следующего года), если оно уже прошло в этом году, без использования условий if.

//Shorten this part
$date = Carbon::parse('first day of March');
if ($date->lessThanOrEqualTo(Carbon::now())) {
  $date->addYear();
}
$output = $date->format('d-m-Y');

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Возможно, не чище, чем ваш метод, но он отличается и работает.
Я создаю массив со всеми релевантными датами, сегодня, 1 марта и 1 марта следующего года, и сортирую их.
Затем я нахожу «сегодня» с array_search в массиве и получаю следующее значение.

$date = array(Carbon::parse('today'),Carbon::parse('first day of March'), Carbon::parse('first day of March + 1 year')); 
sort($date);
$date = $date[array_search(Carbon::parse('today'), $date)+1];
var_dump($date);

Честно говоря, я думаю, что это медленнее, чем if (), но он не использует if () в качестве запроса OP: -)

0 голосов
/ 09 мая 2018

Carbon - это просто класс-оболочка для класса DateTime в PHP.

Следовательно, это должно работать:

<?php

$date = new DateTime('2018-03-01');
$today = new DateTime();
if ($date < $today) {
    $date->modify('+1 year');
}
echo $date->format('d/m/Y');

Выход: 01/03/2019

Посмотрите, как работает здесь https://3v4l.org/i1HvL

Узнайте фактический класс PHP DateTime здесь https://secure.php.net/manual/en/class.datetime.php

Я понятия не имею, почему вы не использовали бы, если проверить, если что-то. Может быть, вам лучше троичный?

$date = ($date < $today) ? $date->modify('+1 year') : $date;
...