File: README.md

package info (click to toggle)
php-lcobucci-clock 3.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 364 kB
  • sloc: php: 155; makefile: 41
file content (71 lines) | stat: -rw-r--r-- 2,576 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Clock

[![Total Downloads]](https://packagist.org/packages/lcobucci/clock)
[![Latest Stable Version]](https://packagist.org/packages/lcobucci/clock)
[![Unstable Version]](https://packagist.org/packages/lcobucci/clock)

[![Build Status]](https://github.com/lcobucci/clock/actions?query=workflow%3A%22PHPUnit%20Tests%22+branch%3A3.2.x)
[![Code Coverage]](https://codecov.io/gh/lcobucci/clock)

Yet another clock abstraction...

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

## Installation

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

```shell
composer require lcobucci/clock
```

## Usage

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:

```php
<?php

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

function filterData(Clock $clock, array $objects): array
{
    return array_filter(
        $objects,
        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
```

[Total Downloads]: https://img.shields.io/packagist/dt/lcobucci/clock.svg?style=flat-square
[Latest Stable Version]: https://img.shields.io/packagist/v/lcobucci/clock.svg?style=flat-square
[Unstable Version]: https://img.shields.io/packagist/vpre/lcobucci/clock.svg?style=flat-square
[Build Status]: https://img.shields.io/github/actions/workflow/status/lcobucci/clock/phpunit.yml?branch=3.2.x&style=flat-square
[Code Coverage]: https://codecov.io/gh/lcobucci/clock/branch/2.1.x/graph/badge.svg
[Packagist]: http://packagist.org/packages/lcobucci/clock
[Composer]: http://getcomposer.org