123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
- <?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\Carbon;
- use Carbon\Carbon;
- use Generator;
- use InvalidArgumentException;
- use Tests\AbstractTestCase;
- class StartEndOfTest extends AbstractTestCase
- {
- public function testStartOfDay()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfDay());
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 0, 0, 0, 0);
- }
- public function testEndOfDay()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfDay());
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 23, 59, 59, 999999);
- }
- public function testStartOfMonthIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfMonth());
- }
- public function testStartOfMonthFromNow()
- {
- $dt = Carbon::now()->startOfMonth();
- $this->assertCarbon($dt, $dt->year, $dt->month, 1, 0, 0, 0);
- }
- public function testStartOfMonthFromLastDay()
- {
- $dt = Carbon::create(2000, 1, 31, 2, 3, 4)->startOfMonth();
- $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
- }
- public function testStartOfYearIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfYear());
- }
- public function testStartOfYearFromNow()
- {
- $dt = Carbon::now()->startOfYear();
- $this->assertCarbon($dt, $dt->year, 1, 1, 0, 0, 0);
- }
- public function testStartOfYearFromFirstDay()
- {
- $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->startOfYear();
- $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
- }
- public function testStartOfYearFromLastDay()
- {
- $dt = Carbon::create(2000, 12, 31, 23, 59, 59)->startOfYear();
- $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
- }
- public function testEndOfMonthIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfMonth());
- }
- public function testEndOfMonth()
- {
- $dt = Carbon::create(2000, 1, 1, 2, 3, 4)->endOfMonth();
- $this->assertCarbon($dt, 2000, 1, 31, 23, 59, 59, 999999);
- }
- public function testEndOfMonthFromLastDay()
- {
- $dt = Carbon::create(2000, 1, 31, 2, 3, 4)->endOfMonth();
- $this->assertCarbon($dt, 2000, 1, 31, 23, 59, 59, 999999);
- }
- public function testEndOfYearIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfYear());
- }
- public function testEndOfYearFromNow()
- {
- $dt = Carbon::now()->endOfYear();
- $this->assertCarbon($dt, $dt->year, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfYearFromFirstDay()
- {
- $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->endOfYear();
- $this->assertCarbon($dt, 2000, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfYearFromLastDay()
- {
- $dt = Carbon::create(2000, 12, 31, 23, 59, 59)->endOfYear();
- $this->assertCarbon($dt, 2000, 12, 31, 23, 59, 59, 999999);
- }
- public function testStartOfDecadeIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfDecade());
- }
- public function testStartOfDecadeFromNow()
- {
- $dt = Carbon::now()->startOfDecade();
- $this->assertCarbon($dt, $dt->year - $dt->year % 10, 1, 1, 0, 0, 0);
- }
- public function testStartOfDecadeFromFirstDay()
- {
- $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->startOfDecade();
- $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
- }
- public function testStartOfDecadeFromLastDay()
- {
- $dt = Carbon::create(2009, 12, 31, 23, 59, 59)->startOfDecade();
- $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
- }
- public function testEndOfDecadeIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfDecade());
- }
- public function testEndOfDecadeFromNow()
- {
- $dt = Carbon::now()->endOfDecade();
- $this->assertCarbon($dt, $dt->year - $dt->year % 10 + 9, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfDecadeFromFirstDay()
- {
- $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->endOfDecade();
- $this->assertCarbon($dt, 2009, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfDecadeFromLastDay()
- {
- $dt = Carbon::create(2009, 12, 31, 23, 59, 59)->endOfDecade();
- $this->assertCarbon($dt, 2009, 12, 31, 23, 59, 59, 999999);
- }
- public function testStartOfCenturyIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfCentury());
- }
- public function testStartOfCenturyFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->startOfCentury();
- $this->assertCarbon($dt, $now->year - $now->year % 100 + 1, 1, 1, 0, 0, 0);
- }
- public function testStartOfCenturyFromFirstDay()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfCentury();
- $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
- }
- public function testStartOfCenturyFromLastDay()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfCentury();
- $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
- }
- public function testStartOfMillenniumIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfMillennium());
- }
- public function testStartOfMillenniumFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->startOfMillennium();
- $this->assertCarbon($dt, $now->year - $now->year % 1000 + 1, 1, 1, 0, 0, 0);
- }
- public function testStartOfMillenniumFromFirstDay()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfMillennium();
- $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
- }
- public function testStartOfMillenniumFromLastDay()
- {
- $dt = Carbon::create(3000, 12, 31, 23, 59, 59)->startOfMillennium();
- $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
- }
- public function testStartOfHourIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfHour());
- }
- public function testStartOfHourFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->startOfHour();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, 0, 0);
- }
- public function testStartOfHourFromFirstMinute()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfHour();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 0, 0);
- }
- public function testStartOfHourFromLastMinute()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfHour();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 0, 0);
- }
- public function testEndOfHourIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfHour());
- }
- public function testEndOfHourFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->endOfHour();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, 59, 59, 999999);
- }
- public function testEndOfHourFromFirstMinute()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, rand(0, 59))->endOfHour();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 59, 59, 999999);
- }
- public function testEndOfHourFromLastMinute()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, rand(0, 59))->endOfHour();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 59, 59, 999999);
- }
- public function testStartOfMinuteIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfMinute());
- }
- public function testStartOfMinuteFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->startOfMinute();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, 0);
- }
- public function testStartOfMinuteFromFirstSecond()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfMinute();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 0);
- }
- public function testStartOfMinuteFromLastSecond()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfMinute();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 0);
- }
- public function testEndOfMinuteIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfMinute());
- }
- public function testEndOfMinuteFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->endOfMinute();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, 59, 999999);
- }
- public function testEndOfMinuteFromFirstSecond()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfMinute();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 59, 999999);
- }
- public function testEndOfMinuteFromLastSecond()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfMinute();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 59, 999999);
- }
- public function testStartOfSecondIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfSecond());
- }
- public function testStartOfSecondFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->startOfSecond();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, $now->second, 0);
- }
- public function testStartOfSecondFromFirstSecond()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfSecond();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 0);
- }
- public function testStartOfSecondFromLastSecond()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfSecond();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 0);
- }
- public function testEndOfSecondIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfSecond());
- }
- public function testEndOfSecondFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->endOfSecond();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, $now->second, 999999);
- }
- public function testEndOfSecondFromFirstSecond()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->modify('01:01:01.1')->endOfSecond();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 999999);
- }
- public function testEndOfSecondFromLastSecond()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->modify('23:59:59.1')->endOfSecond();
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 999999);
- }
- public function testStartOfSecond()
- {
- $dt = new Carbon('2000-06-15 23:10:10.123456');
- $this->assertCarbon($dt->startOfSecond(), 2000, 6, 15, 23, 10, 10, 0);
- $this->assertCarbon($dt->endOfSecond(), 2000, 6, 15, 23, 10, 10, 999999);
- }
- public function testMidDayIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->midDay());
- }
- public function testMidDayFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->midDay();
- $this->assertCarbon($dt, $now->year, $now->month, $now->day, 12, 0, 0);
- }
- public function testEndOfCenturyIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfCentury());
- }
- public function testEndOfCenturyFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->endOfCentury();
- $this->assertCarbon($dt, $now->year - $now->year % 100 + 100, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfCenturyFromFirstDay()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfCentury();
- $this->assertCarbon($dt, 2100, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfCenturyFromLastDay()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfCentury();
- $this->assertCarbon($dt, 2100, 12, 31, 23, 59, 59, 999999);
- }
- public function testEndOfMillenniumIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfMillennium());
- }
- public function testEndOfMillenniumFromNow()
- {
- $now = Carbon::now();
- $dt = Carbon::now()->endOfMillennium();
- $this->assertCarbon($dt, $now->year - $now->year % 1000 + 1000, 12, 31, 23, 59, 59);
- }
- public function testEndOfMillenniumFromFirstDay()
- {
- $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfMillennium();
- $this->assertCarbon($dt, 3000, 12, 31, 23, 59, 59);
- }
- public function testEndOfMillenniumFromLastDay()
- {
- $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfMillennium();
- $this->assertCarbon($dt, 3000, 12, 31, 23, 59, 59);
- }
- public function testStartOfQuarterIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOfQuarter());
- }
- public static function dataForTestStartOfQuarter(): Generator
- {
- yield [1, 1];
- yield [2, 1];
- yield [3, 1];
- yield [4, 4];
- yield [5, 4];
- yield [6, 4];
- yield [7, 7];
- yield [8, 7];
- yield [9, 7];
- yield [10, 10];
- yield [11, 10];
- yield [12, 10];
- }
- /**
- * @dataProvider \Tests\Carbon\StartEndOfTest::dataForTestStartOfQuarter
- *
- * @param int $month
- * @param int $startOfQuarterMonth
- */
- public function testStartOfQuarter($month, $startOfQuarterMonth)
- {
- $dt = Carbon::create(2015, $month, 15, 1, 2, 3);
- $this->assertCarbon($dt->startOfQuarter(), 2015, $startOfQuarterMonth, 1, 0, 0, 0);
- }
- public function testEndOfQuarterIsFluid()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOfQuarter());
- }
- public static function dataForTestEndOfQuarter(): Generator
- {
- yield [1, 3, 31];
- yield [2, 3, 31];
- yield [3, 3, 31];
- yield [4, 6, 30];
- yield [5, 6, 30];
- yield [6, 6, 30];
- yield [7, 9, 30];
- yield [8, 9, 30];
- yield [9, 9, 30];
- yield [10, 12, 31];
- yield [11, 12, 31];
- yield [12, 12, 31];
- }
- /**
- * @dataProvider \Tests\Carbon\StartEndOfTest::dataForTestEndOfQuarter
- *
- * @param int $month
- * @param int $endOfQuarterMonth
- * @param int $endOfQuarterDay
- */
- public function testEndOfQuarter($month, $endOfQuarterMonth, $endOfQuarterDay)
- {
- $dt = Carbon::create(2015, $month, 15, 1, 2, 3);
- $this->assertCarbon($dt->endOfQuarter(), 2015, $endOfQuarterMonth, $endOfQuarterDay, 23, 59, 59, 999999);
- }
- public function testAverageIsFluid()
- {
- $dt = Carbon::now()->average();
- $this->assertInstanceOfCarbon($dt);
- }
- public function testAverageFromSame()
- {
- $dt1 = Carbon::create(2000, 1, 31, 2, 3, 4);
- $dt2 = Carbon::create(2000, 1, 31, 2, 3, 4)->average($dt1);
- $this->assertCarbon($dt2, 2000, 1, 31, 2, 3, 4);
- }
- public function testAverageFromGreater()
- {
- $dt1 = Carbon::create(2000, 1, 1, 1, 1, 1);
- $dt2 = Carbon::create(2009, 12, 31, 23, 59, 59)->average($dt1);
- $this->assertCarbon($dt2, 2004, 12, 31, 12, 30, 30);
- }
- public function testAverageFromLower()
- {
- $dt1 = Carbon::create(2009, 12, 31, 23, 59, 59);
- $dt2 = Carbon::create(2000, 1, 1, 1, 1, 1)->average($dt1);
- $this->assertCarbon($dt2, 2004, 12, 31, 12, 30, 30);
- }
- public function testAverageWithCloseDates()
- {
- $dt1 = Carbon::parse('2004-01-24 09:46:56.500000');
- $dt2 = Carbon::parse('2004-01-24 09:46:56.600000');
- $this->assertSame('2004-01-24 09:46:56.550000', $dt1->average($dt2)->format('Y-m-d H:i:s.u'));
- }
- public function testAverageWithFarDates()
- {
- $dt1 = Carbon::parse('-2018-05-07 12:34:46.500000', 'UTC');
- $dt2 = Carbon::parse('6025-10-11 20:59:06.600000', 'UTC');
- $this->assertSame('2004-01-24 04:46:56.550000', $dt1->average($dt2)->format('Y-m-d H:i:s.u'));
- }
- public function testStartOf()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOf('day'));
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 0, 0, 0, 0);
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->startOf('Months'));
- $this->assertCarbon($dt, $dt->year, $dt->month, 1, 0, 0, 0, 0);
- }
- public function testEndOf()
- {
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOf('day'));
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 23, 59, 59, 999999);
- $dt = Carbon::now();
- $this->assertInstanceOfCarbon($dt->endOf('Months'));
- $this->assertCarbon($dt, $dt->year, $dt->month, $dt->daysInMonth, 23, 59, 59, 999999);
- }
- public function testStartOfInvalidUnit()
- {
- $this->expectExceptionObject(new InvalidArgumentException(
- 'Unknown unit \'microsecond\''
- ));
- Carbon::now()->startOf('microsecond');
- }
- public function testEndOfInvalidUnit()
- {
- $this->expectExceptionObject(new InvalidArgumentException(
- 'Unknown unit \'microsecond\''
- ));
- Carbon::now()->endOf('microsecond');
- }
- }
|