lexide / chronos
提供返回时间戳的类
Requires
- php: >=8.0
Requires (Dev)
- lexide/pharmacist: ~1.1.0
- mockery/mockery: ^1.4.0
- phpunit/phpunit: ~9.3
This package is auto-updated.
Last update: 2024-09-20 19:40:24 UTC
README
Chronos提供返回时间戳的类,以抽象对系统时间的依赖。这在进行单元测试时非常有用,因为你可以模拟TimeProviderInterface
,而不依赖于获取系统时间的调用
它还包含一个计时器,使用时间提供者生成以秒为单位的时间间隔
安装
composer require lexide/chronos
要使用此库提供的lexide/syringe
DI配置,请将以下内容添加到您的composer.json文件中
"extra": { "lexide/puzzle-di": { "whitelist": { "lexide/syringe": [ "lexide/chronos" ] } } }
注意:您需要在项目中安装lexide/puzzle-di以利用此功能
时间提供者
此库中包含的时间提供者都返回从给定时间点开始到现在的秒数。每个类都有一个get
方法,用于获取当前时间。在模拟这些类时,您可以对get
方法设置期望值,以返回模拟时间间隔经过的值。
此库提供了一些提供者类
TimeProvider
- 返回以秒为单位的Unix时间戳MilliTimeProvider
- 返回以毫秒为精度的Unix时间戳MicroTimeProvider
- 返回以微秒为精度的Unix时间戳NanoTimeProvider
返回具有纳秒精度的任意时间戳
注意:NanoTimeProvider
不返回Unix时间戳。它是基于hrtime
函数的,该函数返回从任意时间点(如系统启动时间)开始的纳秒数。由于这个时间点无法事先知道,因此NanoTimeProvider
不能用于日期计算,只能用于计时时间间隔
自定义时间提供者
如果您需要使用不同的时间单位,例如毫秒的整数,您可以创建一个实现Lexide\Chronos\TimeProvider\TimeProviderInterface
的新类。在它的get
方法中,您可以返回任何满足您要求的整数或浮点值。
时间跳过器
时间跳过器通过使用sleep()
和相关的函数来延迟PHP处理脚本。每个类都有一个skip
方法,该方法需要一个表示要延迟的秒数的参数。请注意,此值始终是秒数;向MicroTimeSkipper
传递100
将延迟100秒,而不是100微秒
此库中可用的跳过器类有
TimeSkipper
- 以整秒为单位延迟处理MilliTimeProvider
- 以毫秒为单位延迟处理MicroTimeProvider
- 以微秒为单位延迟处理NanoTimeProvider
以纳秒为单位延迟处理
计时器
计时器类执行计时任务持续时间的通用功能。它们使用时间提供者捕获起始时间点,并在需要时计算出起始点和第二个时间点之间的差异
计时器类
要使用计时器,您必须调用其上的start()
以捕获起始时间。然后您可以调用stop()
以停止计时并返回时间差。或者,如果您想继续计时,调用duration()
将返回经过的时间,但保持计时器运行,允许多次调用duration()
。
多计时器
MultiStopWatch
在需要记录多个并发持续时间而无需为每个计时器创建一个StopWatch
的情况下非常有用。其功能与StopWatch
相同,但在每个情况下,使用key
参数来区分并发计时。
例如,调用start("foo")
然后调用start("bar")
将启动两个计时器。如果随后调用stop("foo")
,则“bar”计时器将继续运行,直到用该键调用stop
。
StopWatch模式
两个StopWatch都可以在连续或间隔模式下运行,这会影响从duration()
调用返回的值。
在连续模式下,duration()
将返回当前时间与初始启动时间之间的差值,即测量自计时器启动以来的总时间。
间隔模式通过在每次调用duration()
时将启动时间设置为当前时间而有所不同。这允许测量duration()
调用之间的间隔;相当于使用真实计时器时的单独圈数。