eventsauce/clock
Simple clock abstraction for PHP. Use SystemClock in production and TestClock in tests to control time deterministically. Get now() as DateTimeImmutable, access timeZone(), move time forward, tick to system time, or fixate to a specific moment.
This is the EventSauce Clock component, which provides a straight forward way to consume time. Using a clock makes your code easier to test.
composer require eventsauce/clock
This package provides two implementations of the EventSauce\Clock\Clock interface.
In your production configuration, use the EventSauce\Clock\SystemClock implementation.
<?php
use EventSauce\Clock\SystemClock;
$clock = new SystemClock(new DateTimeZone('UTC') /* timezone optional */);
$dateTimeImmutable = $clock->now();
$timezone = $clock->timeZone();
In your test configuration, use the EventSauce\Clock\TestClock implementation.
<?php
use EventSauce\Clock\TestClock;
$testClock = new TestClock();
$dateTimeImmutable = $testClock->now();
$timezone = $testClock->timeZone();
// move the clock forward
$testClock->moveForward(DateInterval::createFromDateString('1 day'));
// Skip to system "now"
$testClock->tick();
// Fixate the clock to a specific date and time
$testClock->fixate('1987-11-24 18:33:10');
How can I help you explore Laravel packages today?