savvywombat / ahora
时间间隔计算器,帮助汇总多个时间间隔并显示总耗时天数/小时/分钟/秒
1.1
2021-07-19 01:44 UTC
Requires
- php: ^7.4
Requires (Dev)
- mockery/mockery: ^1.4.3
- phpunit/phpunit: ^9.5.6
README
时间间隔计算器。
允许汇总间隔,并方便地访问间隔内包含的秒数/分钟/小时/天数。
安装
使用 Composer
composer require savvywombat/ahora
用法
创建
您可以通过创建一个新的实例来创建一个新的间隔,可选地传入一个 ISO8601间隔规范
use SavvyWombat\Ahora\Interval;
$interval = new Interval();
echo $interval->seconds; // outputs 0
$interval = new Interval("PT100D"); // 100 days
echo $interval->seconds; // outputs 8640000
或者,您可以从PHP的DateInterval或以下静态方法创建一个间隔
use SavvyWombat\Ahora\Interval;
$date1 = new \DateTime("now");
$date2 = new \DateTime("2018-01-01");
$interval = Interval::createFromDateInterval($date1->diff($date2));
// or
$interval = Interval::createFromIntervalSpec("P28DT6H42M12S");
间隔数学
一旦您有一个间隔,您就可以轻松地添加秒数、分钟、小时或天数
$interval = new Interval();
$interval->addSeconds(60); // equivalent to $interval->addMinutes(1);
$interval->addMinutes(60); // equivalent to $interval->addHours(1);
$interval->addHours(24); // equivalent to $interval->addDays(1);
$interval->addDays(7);
添加间隔
您还可以将间隔相加
$firstInterval = new Interval();
$firstInterval->addSeconds(45);
$secondInterval = new Interval();
$secondInterval->addSeconds(70);
$firstInterval->addInterval($secondInterval);
echo $firstInterval->seconds; // outputs 55
echo $firstInterval->minutes; // outputs 1
echo $firstInterval->realSeconds; // outputs 115
减去间隔
同样,您可以从一个间隔中减去另一个间隔
$firstInterval = new Interval();
$firstInterval->addSeconds(45);
$secondInterval = new Interval();
$secondInterval->addSeconds(200);
$firstInterval->subInterval($secondInterval);
echo $firstInterval->seconds; // outputs -35
echo $firstInterval->minutes; // outputs -2
echo $firstInterval->realSeconds; // outputs -155
单位和系数
您可以将额外的单位注入间隔(如周)。
您甚至可以修改或完全替换间隔使用的单位 - 但前提是其中一个单位必须是秒
的倍数
$interval = new Interval();
$interval->addDays(10);
echo $interval->days; // outputs 10
$interval->setFactor('weeks', [7, 'days']);
echo $interval->realHours; // outputs 240
echo $interval->days; // outputs 3
echo $interval->weeks; // outputs 1
$interval->setFactor('days', [8, 'hours']);
$interval->setFactor('weeks', [5, 'days']);
echo $interval->realHours; // outputs 240
echo $interval->days; // outputs 2
echo $interval->weeks; // outputs 4
显然,改变这些系数会对间隔的输出产生一些剧烈的影响。
$interval = new Interval();
$oldFactors = $interval->getFactors(); // [
// 'minutes' => [60, 'seconds'],
// 'hours' => [60, 'minutes'],
// 'days' => [24, 'hours'],
// ]
$interval->setFactors([
'microts' => [1, 'seconds'], // one unit must be related to seconds
'arns' => [3600, 'microts'],
'days' => [24, 'arns'],
'cycles' => [360, 'days'],
]);
$interval->addDays(400);
echo $interval->cycles; // outputs 1
echo $interval->days; // outputs 40
支持
请使用 GitHub问题跟踪器 报告问题。您也可以分支仓库并提交拉取请求。
许可
Ahora遵循MIT许可(MIT)。