-
-
Save kylekatarnls/f9fff3ec10addcd990b546a7cabb4abc to your computer and use it in GitHub Desktop.
Some informations we ask in our issue template are missing, to get support please ensure to give at least:
- your Carbon version;
- your PHP version;
- a minimal code chunk to reproduce your case;
- the current output of this code;
- the output you expect.
Thanks.
From the documentation (https://carbon.nesbot.com/docs/#api-addsub):
By default, Carbon relies on the underlying parent class PHP DateTime behavior. As a result adding or subtracting months can overflow, example:
$dt = Carbon::create(2017, 1, 31, 0); echo $dt->copy()->addMonth(); // 2017-03-03 00:00:00 echo $dt->copy()->subMonths(2); // 2016-12-01 00:00:00You can prevent the overflow with
Carbon::useMonthsOverflow(false)
Carbon::useMonthsOverflow(false); $dt = Carbon::createMidnightDate(2017, 1, 31); echo $dt->copy()->addMonth(); // 2017-02-28 00:00:00 echo $dt->copy()->subMonths(2); // 2016-11-30 00:00:00 // Call the method with true to allow overflow again Carbon::resetMonthsOverflow(); // same as Carbon::useMonthsOverflow(true);The method
Carbon::shouldOverflowMonths()
allows you to know if the overflow is currently enabled. You also can use->addMonthsNoOverflow
,->subMonthsNoOverflow
,->addMonthsWithOverflow
and->subMonthsWithOverflow
(or the singular methods with no s to "month") to explicitly add/sub months with or without overflow no matter the current mode.Carbon::useMonthsOverflow(false); $dt = Carbon::createMidnightDate(2017, 1, 31); echo $dt->copy()->addMonthWithOverflow(); // 2017-03-03 00:00:00 // plural addMonthsWithOverflow() method is also available echo $dt->copy()->subMonthsWithOverflow(2); // 2016-12-01 00:00:00 // singular subMonthWithOverflow() method is also available echo $dt->copy()->addMonthNoOverflow(); // 2017-02-28 00:00:00 // plural addMonthsNoOverflow() method is also available echo $dt->copy()->subMonthsNoOverflow(2); // 2016-11-30 00:00:00 // singular subMonthNoOverflow() method is also available echo $dt->copy()->addMonth(); // 2017-02-28 00:00:00 echo $dt->copy()->subMonths(2); // 2016-11-30 00:00:00 Carbon::useMonthsOverflow(true); $dt = Carbon::createMidnightDate(2017, 1, 31); echo $dt->copy()->addMonthWithOverflow(); // 2017-03-03 00:00:00 echo $dt->copy()->subMonthsWithOverflow(2); // 2016-12-01 00:00:00 echo $dt->copy()->addMonthNoOverflow(); // 2017-02-28 00:00:00 echo $dt->copy()->subMonthsNoOverflow(2); // 2016-11-30 00:00:00 echo $dt->copy()->addMonth(); // 2017-03-03 00:00:00 echo $dt->copy()->subMonths(2); // 2016-12-01 00:00:00 Carbon::resetMonthsOverflow();From version 1.23.0, overflow control is also available on years.