gamez/duration

轻松处理持续时间

4.3 2021-11-01 15:45 UTC

This package is auto-updated.

Last update: 2024-09-13 19:58:27 UTC


README

轻松处理持续时间。

Current version Supported PHP version Code Coverage Sponsor

你喜欢使用 DateInterval 来计算和操作持续时间吗?我也不喜欢,那么让我们来解决这个问题吧!

安装

您可以使用 Composer 安装此包

composer require gamez/duration

然后您可以使用 Duration

<?php
use Gamez\Duration;

$duration = Duration::make('13 minutes 37 seconds');
// or start with nothing
$duration = Duration::none();

参考

支持的输入值

DateIntervals

use Gamez\Duration;

Duration::make('PT13M37S');
Duration::make(new DateInterval('PT13M37S'));

冒号表示法

use Gamez\Duration;

Duration::make('13:37'); // minutes:seconds
Duration::make('13:37:37'); // hours:minutes:seconds

文本表示法

文本表示法是任何可以被 DateInterval::createFromDateString() 处理的值

use Gamez\Duration;

Duration::make('13 minutes 37 seconds');

转换

转换后,持续时间将

  • 转换为 DateInterval 表示形式
  • 优化,例如输入值为 60 秒将输出为 "1 分钟",例如 "PT60S" 将转换为 "PT1H"
use Gamez\Duration;

$duration = Duration::make('8 days 29 hours 77 minutes');

echo (string) $duration; // P9DT6H17M
echo json_encode($duration); // "P9DT6H17M"

比较

use Gamez\Duration;

$oneSecond = Duration::make('1 second');
$sixtySeconds = Duration::make('60 seconds');
$oneMinute = Duration::make('1 minute');
$oneHour = Duration::make('1 hour');

$oneSecond->isSmallerThan($oneMinute); // true
$oneHour->isLargerThan($oneMinute); // true
$oneMinute->equals($sixtySeconds); // true

$durations = [$oneMinute, $oneSecond, $oneHour, $sixtySeconds];

usort($durations, function ($a, $b) {
    return $a->compareTo($b);
}); // -> [$oneSecond, $sixtySeconds, $oneMinute, $oneHour]

操作

结果将总是四舍五入到秒。

use Gamez\Duration;

$thirty = Duration::make('30 seconds');

echo $thirty->withAdded('31 seconds'); // PT1M1S
echo $thirty->withSubtracted('29 seconds'); // PT1S
echo $thirty->multipliedBy(3); // PT1M30S
echo $thirty->dividedBy(2.5); // PT12S

$thirty->multipliedBy(-1); // InvalidArgumentException
$thirty->withSubtracted('31 seconds'); // InvalidArgumentException

路线图

  • 支持更多输入格式
  • 添加"人类可读的输出"(如冒号表示法)
  • 支持精度(类似于 spatie/period
  • ...