intriro/clock

系统日期的简单包装器

2.0.0 2020-07-20 07:06 UTC

This package is auto-updated.

Last update: 2024-09-20 16:04:23 UTC


README

PHP 的简单时钟抽象库。

动机

DateTime 实例的问题在于它们不可测试和模拟。它们始终依赖于系统日期和时间。因此,您绝不应该直接创建 DateTime 实例。

使用 Clock 接口,您可以切换实现方式,因此可以控制返回的 DateTime 实例。

安装

使用 Composer 安装。

composer require intriro/clock

实现

Clock 对象提供对当前日期和时间的访问。基本上,它只是一个返回代表当前日期和时间的 DateTimeImmutable 实例的对象。

使用 Clock 接口,您始终可以交换实现方式,并获得不依赖于系统时间的 DateTimeImmutable 实例。

该库提供了一个 Clock 接口和三个实现。

SystemClock 允许您访问系统日期和时间。它仅返回 new DateTimeImmutable('now'),并且是默认实现。

ShiftedSystemClock 返回一个提供间隔的系统日期和时间。

FixedClock 返回预定义的固定日期和时间。

示例

class Event
{
    /**
     * @var DateTimeImmutable
     */
    private $date;

    public function hasPassed(Clock $clock): bool
    {
        if ($this->clock->now() > $this->date) {
            return true;
        }
        
        return false;
    }
}