$ composer require nanaweb/clock
Inject to classes that needs current timestamp, and call $this->clock->now()
to get current timestamp.
<?php
class SomeClass
{
private $clock;
public function __construct(\Nanaweb\Clock $clock)
{
$this->clock = $clock;
}
public function getFiveHourLater()
{
/** @var \DateTimeImmutable $now */
$now = $this->clock->now();
return $now->add(new \DateInterval('PT5H')); //
}
}
Inject to classes that needs current date, and call $this->clock->today()
to get current date.
<?php
class SomeClass2
{
private $clock;
public function __construct(\Nanaweb\Clock $clock)
{
$this->clock = $clock;
}
public function getFiveDaysAgo()
{
/** @var \DateTimeImmutable $today */
$today = $this->clock->today();
return $today->sub(new \DateInterval('P5D')); // 00:00:00 of five days ago
}
}
To test time-sensitive classes.
<?php
class SomeClassTest extends TestCase
{
public function test_fiveHoursAgo()
{
$clockP = $this->prophesize(\Nanaweb\Clock::class);
$clockP->now()->willReturn(new \DateTimeImmutable('2020-05-16 10:00:00'))->shouldBeCalled();
$SUT = new SomeClass($clockP->reveal());
$this->assertEquals('2020-05-16 15:00:00', $SUT->getFiveHoursLater());
}
}