p2 project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
7.2 KiB

<?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\Jenssegers;
use Carbon\Carbon;
use DateTimeImmutable;
class DateTest extends TestCaseBase
{
public function testConstructFromString()
{
Carbon::setTestNow();
$date = new Carbon('2013-01-31');
$this->assertSame(1359590400, $date->getTimestamp());
$before = (new DateTimeImmutable())->getTimestamp();
$date = new Carbon('1 day ago');
$after = (new DateTimeImmutable())->getTimestamp();
$this->assertGreaterThanOrEqual($before - 86400, $date->getTimestamp());
$this->assertLessThanOrEqual($after - 86400, $date->getTimestamp());
}
public function testConstructTimestamp()
{
$date = new Carbon('@1367186296');
$this->assertSame(1367186296, $date->getTimestamp());
}
public function testMake()
{
$date1 = Carbon::make('Sunday 28 April 2013 21:58:16');
$date2 = new Carbon('Sunday 28 April 2013 21:58:16');
$this->assertEquals($date1, $date2);
}
public function testCreateFromCarbon()
{
// Preferred way
$date = Carbon::make(Carbon::createFromFormat('U', '1367186296'));
$this->assertInstanceOf(Carbon::class, $date);
$this->assertSame(1367186296, $date->getTimestamp());
// Accepted for backward-compatibility with some libraries
$date = Carbon::make(Carbon::createFromFormat('!U', 1367186296));
$this->assertInstanceOf(Carbon::class, $date);
$this->assertSame(1367186296, $date->getTimestamp());
// Deprecated usage
$date = Carbon::make(Carbon::createFromFormat('!md', 1225));
$this->assertInstanceOf(Carbon::class, $date);
$this->assertSame(30931200, $date->getTimestamp());
}
public function testManipulation()
{
$now = Carbon::now();
$this->assertSame(86400, $now->copy()->add('1 day')->getTimestamp() - $now->getTimestamp());
$this->assertSame(4 * 86400, $now->copy()->add('4 day')->getTimestamp() - $now->getTimestamp());
$this->assertSame(-86400, $now->copy()->sub('1 day')->getTimestamp() - $now->getTimestamp());
$this->assertSame(-4 * 86400, $now->copy()->sub('4 day')->getTimestamp() - $now->getTimestamp());
$this->assertSame(10 * 86400, $now->copy()->add('P10D')->getTimestamp() - $now->getTimestamp());
$this->assertSame(-10 * 86400, $now->copy()->sub('P10D')->getTimestamp() - $now->getTimestamp());
}
public function testFormat()
{
$date = new Carbon('@1367186296');
$this->assertSame('Sunday 28 April 2013 21:58:16', $date->format('l j F Y H:i:s'));
}
public function testAge()
{
// Age test can't work on February 29th
if (Carbon::now()->format('m-d') === '02-29') {
Carbon::setTestNow(Carbon::now()->subDay());
}
$date = Carbon::parse('-5 years');
$this->assertSame(5, $date->age);
}
public function testAgo()
{
// Ago test can't work on February 29th
if (Carbon::now()->format('m-d') === '02-29') {
Carbon::setTestNow(Carbon::now()->subDay());
}
$date = Carbon::parse('-5 years');
$this->assertSame('5 years ago', $date->ago());
$date = JenssegersDate::now()->subMonthsNoOverflow(5);
$this->assertSame('5 months ago', $date->ago());
$date = Carbon::parse('-32 days');
$this->assertSame('1 month ago', $date->ago());
$date = Carbon::parse('-4 days');
$this->assertSame('4 days ago', $date->ago());
$date = Carbon::parse('-1 day');
$this->assertSame('1 day ago', $date->ago());
$date = Carbon::parse('-3 hours');
$this->assertSame('3 hours ago', $date->ago());
$date = Carbon::parse('-1 hour');
$this->assertSame('1 hour ago', $date->ago());
$date = Carbon::parse('-2 minutes');
$this->assertSame('2 minutes ago', $date->ago());
$date = Carbon::parse('-1 minute');
$this->assertSame('1 minute ago', $date->ago());
$date = Carbon::parse('-50 second');
$this->assertSame('50 seconds ago', $date->ago());
$date = Carbon::parse('-1 second');
$this->assertSame('1 second ago', $date->ago());
$date = Carbon::parse('+5 days');
$this->assertSame('5 days from now', $date->ago());
$date = Carbon::parse('+5 days');
$this->assertSame('5 days after', $date->ago(Carbon::now()));
$date = Carbon::parse('-5 days');
$this->assertSame('5 days before', $date->ago(Carbon::now()));
}
public function testAbsoluteAgo()
{
$date = Carbon::parse('-5 days');
$this->assertSame('5 days', $date->ago(Carbon::now(), true));
$date = Carbon::parse('+5 days');
$this->assertSame('5 days', $date->ago(Carbon::now(), true));
}
public function testDiffForHumans()
{
// Diff for humans test can't work on February 29th
if (Carbon::now()->format('m-d') === '02-29') {
Carbon::setTestNow(Carbon::now()->subDay());
}
$date = Carbon::parse('-5 years');
$this->assertSame('5 years ago', $date->diffForHumans());
$date = Carbon::parse('-15 days');
$this->assertSame('2 weeks ago', $date->diffForHumans());
$date = Carbon::parse('-13 days');
$this->assertSame('1 week ago', $date->diffForHumans());
$date = Carbon::parse('-13 days');
$this->assertSame('1 week', $date->diffForHumans(null, true));
$date = JenssegersDate::now()->subMonthsNoOverflow(3);
$this->assertSame('3 months', $date->diffForHumans(null, true));
$date = Carbon::parse('-1 week');
$future = Carbon::parse('+1 week');
$this->assertSame('2 weeks after', $future->diffForHumans($date));
$this->assertSame('2 weeks before', $date->diffForHumans($future));
}
public function testTimespan()
{
$date = new Carbon('@1403619368');
$date = $date->sub('-100 days -3 hours -20 minutes');
$this->assertSame('3 months, 1 week, 1 day, 3 hours, 20 minutes', $date->timespan('@1403619368'));
}
public function testTranslateTimeString()
{
Carbon::setLocale('ru');
$date = Carbon::translateTimeString('понедельник 21 март 2015');
$this->assertSame('monday 21 march 2015', mb_strtolower($date));
Carbon::setLocale('de');
$date = Carbon::translateTimeString('Montag 21 März 2015');
$this->assertSame('monday 21 march 2015', mb_strtolower($date));
$this->assertSame('Foobar', Carbon::translateTimeString('Foobar', 'xx'));
}
public function testTranslateTimeStringWithOrdinalWords()
{
$date = Carbon::translateTimeString('Premier lundi de mai', 'fr', 'en');
$this->assertSame('first monday of may', mb_strtolower($date));
$date = Carbon::translateTimeString('Premier lundi de mai', 'fr', 'es');
$this->assertSame('primer lunes de mayo', mb_strtolower($date));
}
}