Увы нативные DateTime объекты не стольо удобны, а Symfony Clock Component:
1. Удобно тестировать:
public function myFunctionProvider(): Generator
{
$testNow = CarbonImmutable::create(); // просто создаю время (оно будет 0000-01-01 00:00:00.000000)
CarbonImmutable::setTestNow($testNow); // говорю Карбону, что сейчас время 0000-01-01 00:00:00.000000
yield [
'some html v1',
(new CarbonImmutable())->addMinutes(10), // создаю объект времени: 0000-01-01 00:10:00.000000
];
yield [
'some html v2',
(new CarbonImmutable())->subHour(), // создаю объект времени: -0001-12-31 23:00:00.000000
];
yield [
'some html v3',
new CarbonImmutable(), // создаю объект времени: 0000-01-01 00:00:00.000000
];
}
/**
* @dataProvider myFunctionProvider
*/
public function testMyFunction(string $html, DateTimeImmutable $expected)
{
$serviceMock = $this->getMockBuilder(MyClass::class)
->disableOriginalConstructor()
->setMethodsExcept(['myFunction'])
->getMock();
// в myFunction я создаю объекты времени с помощью Carbon, например так: (new CarbonImmutable())->subHour();
$result = $serviceMock->myFunction($html);
$this->assertEquals($expected, $result);
}2. Удобно смотреть разницу времени (пригодится в комментариях или новостях):
$dt = Carbon::now();
$dt->toTimeString(); // 10:10:16
$dt->toDateTimeString(); // 2015-12-19 10:10:16
$current->diffInHours($dt); // 6
$current->diffInDays($future); // 31
$dt->diffForHumans($future); // через 1 месяц3. Удобно создавать:
$dt = new Carbon('tomorrow');
$dt->month = 04;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
$dt->setDateTime(1975, 5, 21, 22, 32, 5);
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5);
$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5);
Carbon::now();
new Carbon();
Carbon::today();
Carbon::yesterday();
Carbon::tomorrow();
new Carbon('first day of January 2016');
new Carbon('first day of January 2016', 'America\Pacific');Удобно менять:
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->addYears(5);
echo $dt->addYear();
echo $dt->subYear();
echo $dt->subYears(5);
echo $dt->addMonths(60);
echo $dt->addMonth();
echo $dt->subMonth();
echo $dt->subMonths(60);
echo $dt->addDays(29);
echo $dt->addDay();
echo $dt->subDay();
echo $dt->subDays(29);
echo $dt->addWeekdays(4);
echo $dt->addWeekday();
echo $dt->subWeekday();
echo $dt->subWeekdays(4);
echo $dt->addWeeks(3);
echo $dt->addWeek();
echo $dt->subWeek();
echo $dt->subWeeks(3);
echo $dt->addHours(24);
echo $dt->addHour();
echo $dt->subHour();
echo $dt->subHours(24);
echo $dt->addMinutes(61);
echo $dt->addMinute();
echo $dt->subMinute();
echo $dt->subMinutes(61);
echo $dt->addSeconds(61);
echo $dt->addSecond();
echo $dt->subSecond();
echo $dt->subSeconds(61);Остальные детали и фичи в документации.
Комментарии
Комментариев пока нет.