123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- <?php
- declare(strict_types=1);
- /**
- * This file is part of the Carbon package.
- *
- * (c) Brian Nesbitt <brian@nesbot.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Tests\CarbonImmutable;
- use Carbon\CarbonImmutable as Carbon;
- use Carbon\CarbonInterval;
- use DateTimeImmutable;
- use Tests\AbstractTestCase;
- class AddTest extends AbstractTestCase
- {
- public function testAddMethod()
- {
- $this->assertSame(1977, Carbon::createFromDate(1975)->add(2, 'year')->year);
- $this->assertSame(1977, Carbon::createFromDate(1975)->add('year', 2)->year);
- $this->assertSame(1977, Carbon::createFromDate(1975)->add('2 years')->year);
- $lastNegated = null;
- $date = Carbon::createFromDate(1975)->add(
- function (DateTimeImmutable $date, bool $negated = false) use (&$lastNegated): DateTimeImmutable {
- $lastNegated = $negated;
- return new DateTimeImmutable($date->format('Y-m-d H:i:s').' + 2 years');
- }
- );
- $this->assertInstanceOf(Carbon::class, $date);
- $this->assertSame(1977, $date->year);
- $this->assertFalse($lastNegated);
- /** @var CarbonInterval $interval */
- $interval = include __DIR__.'/../Fixtures/dynamicInterval.php';
- $originalDate = Carbon::parse('2020-06-04');
- $date = $originalDate->add($interval);
- $this->assertInstanceOf(Carbon::class, $date);
- $this->assertSame('2020-06-08', $date->format('Y-m-d'));
- $this->assertNotSame($date, $originalDate);
- $date = Carbon::parse('2020-06-23')->add($interval);
- $this->assertInstanceOf(Carbon::class, $date);
- $this->assertSame('2020-07-16', $date->format('Y-m-d'));
- }
- public function testAddYearsPositive()
- {
- $this->assertSame(1976, Carbon::createFromDate(1975)->addYears(1)->year);
- }
- public function testAddYearsZero()
- {
- $this->assertSame(1975, Carbon::createFromDate(1975)->addYears(0)->year);
- }
- public function testAddYearsNegative()
- {
- $this->assertSame(1974, Carbon::createFromDate(1975)->addYears(-1)->year);
- }
- public function testAddYear()
- {
- $this->assertSame(1976, Carbon::createFromDate(1975)->addYear()->year);
- $this->assertSame(1977, Carbon::createFromDate(1975)->add(2, 'year')->year);
- $this->assertSame(1977, Carbon::createFromDate(1975)->add(2, 'years')->year);
- $this->assertSame(1977, Carbon::createFromDate(1975)->add(CarbonInterval::years(2))->year);
- }
- public function testAddDaysPositive()
- {
- $this->assertSame(1, Carbon::createFromDate(1975, 5, 31)->addDays(1)->day);
- }
- public function testAddDaysZero()
- {
- $this->assertSame(31, Carbon::createFromDate(1975, 5, 31)->addDays(0)->day);
- }
- public function testAddDaysNegative()
- {
- $this->assertSame(30, Carbon::createFromDate(1975, 5, 31)->addDays(-1)->day);
- }
- public function testAddDay()
- {
- $this->assertSame(1, Carbon::createFromDate(1975, 5, 31)->addDay()->day);
- }
- public function testAddOverflow()
- {
- $this->assertSame(
- '2021-03-03',
- Carbon::parse('2021-01-31')->add(1, 'months', true)->format('Y-m-d')
- );
- $this->assertSame(
- '2021-03-03',
- Carbon::parse('2021-01-31')->add(1, 'months')->format('Y-m-d')
- );
- $this->assertSame(
- '2021-02-28',
- Carbon::parse('2021-01-31')->add(1, 'months', false)->format('Y-m-d')
- );
- }
- public function testAddWeekdaysPositive()
- {
- $dt = Carbon::create(2012, 1, 4, 13, 2, 1)->addWeekdays(9);
- $this->assertSame(17, $dt->day);
- // test for https://bugs.php.net/bug.php?id=54909
- $this->assertSame(13, $dt->hour);
- $this->assertSame(2, $dt->minute);
- $this->assertSame(1, $dt->second);
- }
- public function testAddWeekdaysZero()
- {
- $this->assertSame(4, Carbon::createFromDate(2012, 1, 4)->addWeekdays(0)->day);
- }
- public function testAddWeekdaysNegative()
- {
- $this->assertSame(18, Carbon::createFromDate(2012, 1, 31)->addWeekdays(-9)->day);
- }
- public function testAddWeekday()
- {
- $this->assertSame(9, Carbon::createFromDate(2012, 1, 6)->addWeekday()->day);
- }
- public function testAddWeekdayDuringWeekend()
- {
- $this->assertSame(9, Carbon::createFromDate(2012, 1, 7)->addWeekday()->day);
- }
- public function testAddWeeksPositive()
- {
- $this->assertSame(28, Carbon::createFromDate(1975, 5, 21)->addWeeks(1)->day);
- }
- public function testAddWeeksZero()
- {
- $this->assertSame(21, Carbon::createFromDate(1975, 5, 21)->addWeeks(0)->day);
- }
- public function testAddWeeksNegative()
- {
- $this->assertSame(14, Carbon::createFromDate(1975, 5, 21)->addWeeks(-1)->day);
- }
- public function testAddWeek()
- {
- $this->assertSame(28, Carbon::createFromDate(1975, 5, 21)->addWeek()->day);
- }
- public function testAddHoursPositive()
- {
- $this->assertSame(1, Carbon::createFromTime(0)->addHours(1)->hour);
- }
- public function testAddHoursZero()
- {
- $this->assertSame(0, Carbon::createFromTime(0)->addHours(0)->hour);
- }
- public function testAddHoursNegative()
- {
- $this->assertSame(23, Carbon::createFromTime(0)->addHours(-1)->hour);
- }
- public function testAddHour()
- {
- $this->assertSame(1, Carbon::createFromTime(0)->addHour()->hour);
- }
- public function testAddMinutesPositive()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0)->addMinutes(1)->minute);
- }
- public function testAddMinutesZero()
- {
- $this->assertSame(0, Carbon::createFromTime(0, 0)->addMinutes(0)->minute);
- }
- public function testAddMinutesNegative()
- {
- $this->assertSame(59, Carbon::createFromTime(0, 0)->addMinutes(-1)->minute);
- }
- public function testAddMinute()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0)->addMinute()->minute);
- }
- public function testAddSecondsPositive()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0, 0)->addSeconds(1)->second);
- }
- public function testAddSecondsZero()
- {
- $this->assertSame(0, Carbon::createFromTime(0, 0, 0)->addSeconds(0)->second);
- }
- public function testAddSecondsNegative()
- {
- $this->assertSame(59, Carbon::createFromTime(0, 0, 0)->addSeconds(-1)->second);
- }
- public function testAddSecond()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0, 0)->addSecond()->second);
- }
- public function testAddMillisecondsPositive()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0, 0)->addMilliseconds(1)->millisecond);
- }
- public function testAddMillisecondsZero()
- {
- $this->assertSame(100, Carbon::createFromTime(0, 0, 0.1)->addMilliseconds(0)->millisecond);
- }
- public function testAddMillisecondsNegative()
- {
- $this->assertSame(999, Carbon::createFromTime(0, 0, 0)->addMilliseconds(-1)->millisecond);
- $this->assertSame(99, Carbon::createFromTime(0, 0, 0.1)->addMilliseconds(-1)->millisecond);
- }
- public function testAddMillisecond()
- {
- $this->assertSame(101, Carbon::createFromTime(0, 0, 0.1)->addMillisecond()->millisecond);
- }
- public function testAddMicrosecondsPositive()
- {
- $this->assertSame(1, Carbon::createFromTime(0, 0, 0)->addMicroseconds(1)->microsecond);
- }
- public function testAddMicrosecondsZero()
- {
- $this->assertSame(100000, Carbon::createFromTime(0, 0, 0.1)->addMicroseconds(0)->microsecond);
- }
- public function testAddMicrosecondsNegative()
- {
- $this->assertSame(999999, Carbon::createFromTime(0, 0, 0)->addMicroseconds(-1)->microsecond);
- $this->assertSame(99999, Carbon::createFromTime(0, 0, 0.1)->addMicroseconds(-1)->microsecond);
- }
- public function testAddMicrosecond()
- {
- $this->assertSame(100001, Carbon::createFromTime(0, 0, 0.1)->addMicrosecond()->microsecond);
- }
- /**
- * Test non plural methods with non default args.
- */
- public function testAddYearPassingArg()
- {
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(1977, $date->addYear(2)->year);
- }
- public function testAddDayPassingArg()
- {
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975, 5, 10);
- $this->assertSame(12, $date->addDay(2)->day);
- }
- public function testAddHourPassingArg()
- {
- /** @var mixed $date */
- $date = Carbon::createFromTime(10);
- $this->assertSame(12, $date->addHour(2)->hour);
- }
- public function testAddMinutePassingArg()
- {
- /** @var mixed $date */
- $date = Carbon::createFromTime(0);
- $this->assertSame(2, $date->addMinute(2)->minute);
- }
- public function testAddSecondPassingArg()
- {
- /** @var mixed $date */
- $date = Carbon::createFromTime(0);
- $this->assertSame(2, $date->addSecond(2)->second);
- }
- public function testAddQuarter()
- {
- $this->assertSame(8, Carbon::createFromDate(1975, 5, 6)->addQuarter()->month);
- }
- public function testAddQuarterNegative()
- {
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975, 5, 6);
- $this->assertSame(2, $date->addQuarter(-1)->month);
- }
- public function testSubQuarter()
- {
- $this->assertSame(2, Carbon::createFromDate(1975, 5, 6)->subQuarter()->month);
- }
- public function testSubQuarterNegative()
- {
- $this->assertCarbon(Carbon::createFromDate(1975, 5, 6)->subQuarters(2), 1974, 11, 6);
- }
- public function testAddCentury()
- {
- $this->assertSame(2075, Carbon::createFromDate(1975)->addCentury()->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(2075, $date->addCentury(1)->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(2175, $date->addCentury(2)->year);
- }
- public function testAddCenturyNegative()
- {
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(1875, $date->addCentury(-1)->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(1775, $date->addCentury(-2)->year);
- }
- public function testAddCenturies()
- {
- $this->assertSame(2075, Carbon::createFromDate(1975)->addCenturies(1)->year);
- $this->assertSame(2175, Carbon::createFromDate(1975)->addCenturies(2)->year);
- }
- public function testAddCenturiesNegative()
- {
- $this->assertSame(1875, Carbon::createFromDate(1975)->addCenturies(-1)->year);
- $this->assertSame(1775, Carbon::createFromDate(1975)->addCenturies(-2)->year);
- }
- public function testSubCentury()
- {
- $this->assertSame(1875, Carbon::createFromDate(1975)->subCentury()->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(1875, $date->subCentury(1)->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(1775, $date->subCentury(2)->year);
- }
- public function testSubCenturyNegative()
- {
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(2075, $date->subCentury(-1)->year);
- /** @var mixed $date */
- $date = Carbon::createFromDate(1975);
- $this->assertSame(2175, $date->subCentury(-2)->year);
- }
- public function testSubCenturies()
- {
- $this->assertSame(1875, Carbon::createFromDate(1975)->subCenturies(1)->year);
- $this->assertSame(1775, Carbon::createFromDate(1975)->subCenturies(2)->year);
- }
- public function testSubCenturiesNegative()
- {
- $this->assertSame(2075, Carbon::createFromDate(1975)->subCenturies(-1)->year);
- $this->assertSame(2175, Carbon::createFromDate(1975)->subCenturies(-2)->year);
- }
- public function testAddYearNoOverflow()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYearNoOverflow(), 2017, 2, 28);
- }
- public function testAddYearWithOverflow()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYearWithOverflow(), 2017, 3, 1);
- }
- public function testAddYearNoOverflowPassingArg()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYearsNoOverflow(2), 2018, 2, 28);
- }
- public function testAddYearWithOverflowPassingArg()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYearsWithOverflow(2), 2018, 3, 1);
- }
- public function testSubYearNoOverflowPassingArg()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->subYearsNoOverflow(2), 2014, 2, 28);
- }
- public function testSubYearWithOverflowPassingArg()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->subYearsWithOverflow(2), 2014, 3, 1);
- }
- public function testSubYearNoOverflow()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->subYearNoOverflow(), 2015, 2, 28);
- }
- public function testSubYearWithOverflow()
- {
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->subYearWithOverflow(), 2015, 3, 1);
- }
- public function testUseYearsOverflow()
- {
- $this->assertTrue(Carbon::shouldOverflowYears());
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYears(2), 2018, 3, 1);
- Carbon::useYearsOverflow(false);
- $this->assertFalse(Carbon::shouldOverflowYears());
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYears(2), 2018, 2, 28);
- Carbon::resetYearsOverflow();
- $this->assertTrue(Carbon::shouldOverflowYears());
- $this->assertCarbon(Carbon::createFromDate(2016, 2, 29)->addYears(2), 2018, 3, 1);
- }
- }
|