123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?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 DateTime;
- use DateTimeZone;
- use Tests\AbstractTestCase;
- use Tests\Carbon\Fixtures\MyCarbon;
- class CreateFromFormatTest extends AbstractTestCase
- {
- /**
- * @var array
- */
- protected $lastErrors;
- /**
- * @var array
- */
- protected $noErrors;
- protected function setUp(): void
- {
- parent::setUp();
- $this->noErrors = [
- 'warning_count' => 0,
- 'warnings' => [],
- 'error_count' => 0,
- 'errors' => [],
- ];
- $this->lastErrors = [
- 'warning_count' => 1,
- 'warnings' => ['10' => 'The parsed date was invalid'],
- 'error_count' => 0,
- 'errors' => [],
- ];
- }
- public function testCreateFromFormatReturnsCarbon()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s', '1975-05-21 22:32:11');
- $this->assertCarbon($d, 1975, 5, 21, 22, 32, 11);
- $this->assertInstanceOfCarbon($d);
- }
- public function testCreateFromFalseTimezone()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s.u', '1975-05-21 22:32:11.123456', false);
- $this->assertInstanceOfCarbon($d);
- $this->assertSame('1975-05-21 22:32:11.123456 America/Toronto', $d->format('Y-m-d H:i:s.u e'));
- }
- /**
- * Work-around for https://bugs.php.net/bug.php?id=80141
- */
- public function testCFormat()
- {
- $d = Carbon::createFromFormat('c', Carbon::parse('2020-02-02')->format('c'));
- $this->assertCarbon($d, 2020, 2, 2, 0, 0, 0, 0);
- $d = Carbon::createFromFormat('c', '2020-02-02T23:45:12+09:00');
- $this->assertSame('+09:00', $d->tzName);
- $this->assertCarbon($d, 2020, 2, 2, 23, 45, 12, 0);
- $d = Carbon::createFromFormat('l c', 'Sunday 2020-02-02T23:45:12+09:00');
- $this->assertSame('+09:00', $d->tzName);
- $this->assertCarbon($d, 2020, 2, 2, 23, 45, 12, 0);
- $d = Carbon::createFromFormat('l \\\\c', 'Sunday \\2020-02-02T23:45:12+09:00');
- $this->assertSame('+09:00', $d->tzName);
- $this->assertCarbon($d, 2020, 2, 2, 23, 45, 12, 0);
- $d = Carbon::createFromFormat('Y-m-d\\cH:i:s', '2020-02-02c23:45:12');
- $this->assertCarbon($d, 2020, 2, 2, 23, 45, 12, 0);
- }
- public function testCreateFromFormatWithMillisecondsAlone()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s.v', '1975-05-21 22:32:11.321');
- $this->assertCarbon($d, 1975, 5, 21, 22, 32, 11, 321000);
- $this->assertInstanceOfCarbon($d);
- }
- /**
- * @requires PHP >= 7.3
- *
- * Due to https://bugs.php.net/bug.php?id=75577, proper "v" format support can only works from PHP 7.3.0.
- */
- public function testCreateFromFormatWithMillisecondsMerged()
- {
- $d = Carbon::createFromFormat('Y-m-d H:s.vi', '1975-05-21 22:11.32132');
- $this->assertCarbon($d, 1975, 5, 21, 22, 32, 11, 321000);
- $this->assertInstanceOfCarbon($d);
- }
- public function testCreateFromFormatWithTimezoneString()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s', '1975-05-21 22:32:11', 'Europe/London');
- $this->assertCarbon($d, 1975, 5, 21, 22, 32, 11);
- $this->assertSame('Europe/London', $d->tzName);
- }
- public function testCreateFromFormatWithTimezone()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s', '1975-05-21 22:32:11', new DateTimeZone('Europe/London'));
- $this->assertCarbon($d, 1975, 5, 21, 22, 32, 11);
- $this->assertSame('Europe/London', $d->tzName);
- }
- public function testCreateFromFormatWithMillis()
- {
- $d = Carbon::createFromFormat('Y-m-d H:i:s.u', '1975-05-21 22:32:11.254687');
- $this->assertSame(254687, $d->micro);
- }
- public function testCreateFromFormatWithTestNow()
- {
- Carbon::setTestNow();
- $nativeDate = Carbon::createFromFormat('Y-m-d H:i:s', '1975-05-21 22:32:11');
- Carbon::setTestNow(Carbon::now());
- $mockedDate = Carbon::createFromFormat('Y-m-d H:i:s', '1975-05-21 22:32:11');
- $this->assertSame($mockedDate->micro === 0, $nativeDate->micro === 0);
- }
- public function testCreateLastErrorsCanBeAccessedByExtendingClass()
- {
- $this->assertSame([
- 'warning_count' => 0,
- 'warnings' => [],
- 'error_count' => 0,
- 'errors' => [],
- ], MyCarbon::getLastErrors());
- }
- public function testCreateFromFormatHandlesLastErrors()
- {
- $carbon = Carbon::createFromFormat('d/m/Y', '41/02/1900');
- $datetime = DateTime::createFromFormat('d/m/Y', '41/02/1900');
- $this->assertSame($this->lastErrors, $carbon->getLastErrors());
- $this->assertSame($carbon->getLastErrors(), $datetime->getLastErrors());
- }
- public function testCreateFromFormatResetLastErrors()
- {
- $carbon = Carbon::createFromFormat('d/m/Y', '41/02/1900');
- $this->assertSame($this->lastErrors, $carbon->getLastErrors());
- $carbon = Carbon::createFromFormat('d/m/Y', '11/03/2016');
- $this->assertSame($this->noErrors, $carbon->getLastErrors());
- }
- }
|