tobento / service-clock
PSR-20 clocks for PHP applications.
1.0.0
2023-06-22 14:36 UTC
Requires
- php: >=8.0
- psr/clock: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.0
This package is not auto-updated.
Last update: 2024-12-20 19:38:58 UTC
README
Providing PSR-20 clocks for PHP applications.
Table of Contents
Getting started
Add the latest version of the clock service project running this command.
composer require tobento/service-clock
Requirements
- PHP 8.0 or greater
Highlights
- Framework-agnostic, will work with any project
- Decoupled design
Documentation
Available Clocks
System Clock
The system clock relies on the current system time. If the timezone
parameter is not defined it uses the timezone from the date_default_timezone_get
method.
use Tobento\Service\Clock\SystemClock; use Psr\Clock\ClockInterface; $clock = new SystemClock(); var_dump($clock instanceof ClockInterface); // bool(true)
With defined timezone parameter
use Tobento\Service\Clock\SystemClock; use DateTimeZone; $clock = new SystemClock( timezone: 'UTC' ); $clock = new SystemClock( timezone: new DateTimeZone('Europe/Berlin') );
Frozen Clock
The frozen clock will always return the same date time, suitable for testing. If the now
parameter is not defined it uses the current time of the System Clock.
use Tobento\Service\Clock\FrozenClock; use Psr\Clock\ClockInterface; $clock = new FrozenClock(); var_dump($clock instanceof ClockInterface); // bool(true) // Modify the clock returning a new instance. // Will accept all formats supported by DateTimeImmutable::modify() $clockNew = $clock->modify('+30 seconds'); // With a new timezone returning a new instance. $clockNew = $clock->withTimeZone(timezone: 'UTC');
With defined now parameter
use Tobento\Service\Clock\FrozenClock; use Tobento\Service\Clock\SystemClock; use Psr\Clock\ClockInterface; use DateTimeImmutable; $clock = new FrozenClock( now: new DateTimeImmutable() ); // or from another clock: $clock = new FrozenClock( now: new SystemClock() );