По умолчанию addMonths(1)
добавляет ровно 30 дней в месяц.
Чтобы добавить ровно один месяц (например, чтобы перейти с октября по ноябрь, независимо от того, будет ли это 29/30/31 дней), вам нужно покончить с addMonth()
и вместо этого использовать addMonthsNoOverflow(n)
.
Так, например:
$carbon = Carbon::now('UTC'); // current datetime in UTC is 8:54 AM October 31, 2016
echo $carbon->format('F') . '<br>';
echo $carbon->addMonths(1)->format('F');
неожиданно Выходы:
октября декабря
В то время как
$carbon = Carbon::now('UTC'); // current datetime in UTC is 8:54 AM October 31, 2016
echo $carbon->format('F') . '<br>';
echo $carbon->addMonthsNoOverflow(1)->format('F');
Правильно выходы:
Октябрь Ноябрь
Такое поведение не связано с атомом углерода, но из-за класса PHP даты и времени, что он построен на.
Причина, по которой addMonthsNoOverflow()
НЕ является поведением по умолчанию, заключается в том, что это было бы «нарушением изменений». К сожалению, это НЕ упоминается в документации, так что -1 указывает на углерод для этого.
Вы можете прочитать об этом в этом Github разговор: https://github.com/briannesbitt/Carbon/issues/627
попробовать 'addMonths (2)', что вернется? –
Не совсем уверен, но если вы уберете 1 день, а затем добавьте один месяц, что вы получите? – Epodax
@Epodax, приятно пойманный ... он показывает ноябрь, значит, это значит, что что-то не так с расчетами Carbons? –