普通 / 时钟
一个简单的 PSR-20 时钟实现,用于访问和模拟当前时间。
1.0.0
2022-11-26 16:36 UTC
Requires
- php: ^8.1
- psr/clock: ^1.0.0
Requires (Dev)
- captainhook/captainhook: ^5.11.1
- captainhook/plugin-composer: ^5.3.3
- overtrue/phplint: ^5.3.0
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.18.3
- roave/security-advisories: dev-latest
- slevomat/coding-standard: ^8.6.4
- squizlabs/php_codesniffer: ^3.7.1
- vimeo/psalm: ^4.30.0
README
一个简单的 PSR-20 时钟实现,用于访问和模拟当前时间。
目录
- 入门
- 时钟
UTCClock
- 提供UTC时间。(应该是你的主要时钟使用)AlternateTimeZoneClock
- 基于另一个时钟提供指定时区的时间。FrozenClock
- 仅提供指定的时钟时间。(非常适合模拟和测试)SystemClock
- 提供指定时区的时间。(请随意使用)
时钟接口
入门
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的任何时间的情况。