Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit

| datasource | package         | from  | to    |
| ---------- | --------------- | ----- | ----- |
| packagist  | phpunit/phpunit | 9.6.2 | 9.6.3 |

Git stats


Failed to load latest commit information.


Total Downloads Latest Stable Version Unstable Version

Build Status Code Coverage

Yet another clock abstraction...

The purpose is to decouple projects from DateTimeImmutable instantiation so that we can test things properly.


Package is available on Packagist, you can install it using Composer.

composer require lcobucci/clock


Make your objects depend on the Lcobucci\Clock\Clock interface and use SystemClock or FrozenClock to retrieve the current time or a specific time (for testing), respectively:


use Lcobucci\Clock\Clock;
use Lcobucci\Clock\SystemClock;
use Lcobucci\Clock\FrozenClock;

function filterData(Clock $clock, array $objects): array
    return array_filter(
        static function (stdClass $object) use ($clock): bool {
            return $object->expiresAt > $clock->now();

// Object that will return the current time based on the given timezone
// $clock = SystemClock::fromSystemTimezone();
// $clock = SystemClock::fromUTC();
$clock = new SystemClock(new DateTimeZone('America/Sao_Paulo'));

// Test object that always returns a fixed time object
$clock = new FrozenClock(
    new DateTimeImmutable('2017-05-07 18:49:30')

// Or creating a frozen clock from the current time on UTC
// $clock = FrozenClock::fromUTC();

$objects = [
    (object) ['expiresAt' => new DateTimeImmutable('2017-12-31 23:59:59')],
    (object) ['expiresAt' => new DateTimeImmutable('2017-06-30 23:59:59')],
    (object) ['expiresAt' => new DateTimeImmutable('2017-01-30 23:59:59')],

var_dump(filterData($clock, $objects)); // last item will be filtered