普通/时钟

一个简单的 PSR-20 时钟实现,用于访问和模拟当前时间。

1.0.0 2022-11-26 16:36 UTC

This package is auto-updated.

Last update: 2024-09-10 08:22:09 UTC


README

一个简单的 PSR-20 时钟实现,用于访问和模拟当前时间。

目录

入门

composer require ordinary/clock

使用方法

<?php

use Ordinary\Clock\ClockInterface;
use Ordinary\Clock\UTCClock;

class MyTimeAwareAction
{
    public function __construct(protected ClockInterface $clock)
    {
    }
    
    public function announceTime(): void
    {
        echo 'Time is now ' . $this->clock->now()->format('c') . PHP_EOL;
    }
}

$action = new MyTimeAwareAction(new UTCClock());
$action->announceTime();

时钟

UTCClock

一个始终返回UTC日期对象的时钟。

当管理时间时,应使用此作为主要时钟。

$clock = new UTCClock();

AlternateTimeZoneClock

一个包装另一个时钟以用于不同时区的时钟。

通常,当需要特定时区的操作时,此时钟应该包装UTC时钟。

$clock = new AlternateTimeZoneClock($primaryClock = new UTCClock(), new DateTimeZone('America/Chicago'))

FrozenClock

一个只返回在构造时给出的特定时间的时钟。

通常用于模拟时间。

SystemClock

一个可以与有效时区一起构建的时钟。

$clock = new \Ordinary\Clock\SystemClock(new DateTimeZone('America/Chicago'));

时钟接口方法

ClockInterface::now()

获取表示当前时间的 DateTimeImmutable 实例。

ClockInterface::isBefore($dateTime)

检查给定的时间是否在未来。
不包括给定的时间

ClockInterface::isAfter($dateTime)

检查给定的时间是否在过去。
不包括给定的时间

ClockInterface::isAtEarliest($dateTime)

检查最早是否是给定的时间。
isAfter()的包含版本

ClockInterface::isAtLatest($dateTime)

检查最晚是否是给定的时间。
isBefore()的包含版本

ClockInterface::isBetween($startDate, $endDate)

检查当前时间是否在提供的两个时间之间。
不包括提供的时间

ClockInterface::isBetweenInclusive($startDate, $endDate)

检查当前时间是否在提供的两个时间之间。
包括提供的时间

ClockInterface::isBetweenInclusiveStart($startDate, $endDate)

检查当前时间是否在提供的两个时间之间。
仅包括开始时间
对于类似给定范围是1:00,2:00但需要验证时间是从1:00到1:59的任何时间的情况。