iarcadia / time
PHP 时间/时长库...又是。
Requires (Dev)
- symfony/var-dumper: ^5.0
This package is auto-updated.
Last update: 2024-09-06 23:21:52 UTC
README
简介
时间 是一个 PHP 时间/时长库...又是。
目前,该库支持
- 小时
- 分钟
- 秒
- 毫秒(+秒的十分之一/百分之一)
该库的目标首先是提供一个完全不涉及日期的功能,然后是轻量简单。
用法
实例化
使用 new
关键字
$time = new Time;
使用静态方法 create
$time = Time::create();
两种方法的给定参数相同
// true new Time(56400) === Time::create(56400) // true new Time(0, 0, 56, 400) === Time::create(0, 0, 56, 400) // true new Time(56400) === Time::create(0, 0, 56, 400)
以下示例将使用静态方法。
Time::create($h, $i, $s, $v)
/** * @param int|float $h - Hours * @param int|float $i - Minutes * @param int|float $s - Seconds * @param int|float $v - Milliseconds * * @return iarcadia\time\Time */
示例
创建一个 17 小时 19 分钟的时间
$time = Time::create(17, 19, 0, 0);
创建一个 45 分钟,12 秒和 476 毫秒的时间
$time = Time::create(0, 45, 12, 476);
Time::create($int_or_float)
/** * @param int|float $int_or_float = 0 - Starting timestamp * * @return iarcadia\time\Time */
示例
创建一个 45 分钟,12 秒和 476 毫秒的时间
$time = Time::create(2712476)
格式化
format()
方法可用于格式化和写入您的 Time 实例
/** * @param string $format = '-h\h iim ss\s vvv' * * @return string */
以下是要格式化的字符或字符组
-
当时间为负时出现h
转换为小时ii
转换为分钟,带前导零i
转换为分钟ss
转换为带前导零的秒s
转换为秒d
转换为十分之一秒cc
转换为带前导零的百分之一秒c
转换为百分之一秒vvv
转换为带前导零的毫秒v
转换为毫秒
要避免翻译字符,请在其前面加上反斜杠。
示例
$time = Time::create(1, 56, 4, 235); // Write 1h 56m 04s 235 echo $time->format(); echo $time; // Writes 1:56:04.235 echo $time->format('h:ii:ss.vvv'); // Writes 4 seconds and 235 ms echo $time->format('s \se\con\d\s an\d vvv m\s'); // Write 04.2 echo $time->format('ss.d');
获取器和设置器
该库为您提供了两种不同的获取器,经典获取器和总获取器。
经典获取器会给出上限的整数值,但小时。分钟不会超过 59,毫秒不会超过 999。
总获取器会给出浮点值。
获取器也可以全部用于魔法属性。
$time = Time::create(2, 12, 32, 489); // Write 2 echo $time->getHours(); echo $time->hours; // Write 2.20 echo $time->getTotalHours(); echo $time->total_hours; // Write 12 echo $time->getMinutes(); echo $time->minutes; // Write 132.54 echo $time->getTotalMinutes(); echo $time->total_minutes; // Write 32 echo $time->getSeconds(); echo $time->seconds; // Write 7952.48 echo $time->getTotalSeconds(); echo $time->total_seconds; // Write 4 echo $time->getTenthOfSeconds(); echo $time->tenth_of_seconds; // Write 79524.89 echo $time->getTotalTenthOfSeconds(); echo $time->total_tenth_of_seconds; // Write 48 echo $time->getHundredthOfSeconds(); echo $time->hundredth_of_seconds; // Write 795248.9 echo $time->getTotalHundredthOfSeconds(); echo $time->total_hundredth_of_seconds; // Write 489 echo $time->getMilliseconds(); echo $time->milliseconds; // Write 7952489 echo $time->getTotalMilliseconds(); echo $time->total_milliseconds;
设置器将覆盖 Time 实例的当前时间戳。
它们也作为魔法属性提供。
$time = Time::create(2, 12, 32, 489); // Write 1h 30m 00s 000 $time->setTotalHours(1.5); $time->total_hours = 1.5; echo $time; // Write 0h 30m 15s 000 $time->setTotalMinutes(30.25); $time->total_minutes = 30.25; echo $time; // Write 0h 01m 15s 000 $time->setTotalSeconds(75); $time->total_seconds = 75; echo $time; // Write 0h 00m 48s 600 $time->setTotalTenthOfSeconds(486); $time->total_tenth_of_seconds = 486; echo $time; // Write 0h 01m 29s 610 $time->setTotalHundredthOfSeconds(8961); $time->total_hundredth_of_seconds = 8961; echo $time; // Write 0h 02m 05s 658 $time->setTotalMilliseconds(125658); $time->total_milliseconds = 125658; echo $time;
负时间
在创建时,Time 实例可以是负数,只需用负时间戳实例化它即可。
// Write -1h 35m 30s 210 $time = Time::create(-5703210); echo $time;
请注意,使用 Time::create()
并带有 4 个参数将不会按预期为负时间工作。
操作
通过使用 Time#addX()
和 Time#subX()
方法,该库可以通过这些方法进行加法和减法。
// Write 2h 49m 23s 486 $time = Time::create(60000); $time ->addHours(2) ->addMinutes(48) ->addSeconds(23) ->addMilliseconds(486); echo $time;
您也可以通过使用 Time#addFromTime()
和 Time#subFromTime()
与其他 Time 实例执行这些操作。
// Write 0h 02m 15s 000 $time1 = Time::create(60000); $time2 = Time::create(85000); $time1->addFromTime($time2); echo $time; // Write 0h 01m 00s 000 $time1->subFromTime($time2); echo $time;
最后,存在快捷方法:Time#add()
和 Time#sub()
。这两个方法可以一次性接受许多参数,并接受整数/浮点值和时间对象。
如果给出 4 个参数,它将像使用 4 个参数的实例化一样进行添加/减法。
// Write 0h 02m 15s 154 $time1 = Time::create(60000); $time2 = Time::create(85000); $time1->add($time2, 154); echo $time; // Write 0h 00m 00s 000 $time1->sub(0, 2, 15, 154); echo $time;
该库提供了 Time#diff()
和 Time::diffBetween()
方法来计算两个时间之间的差异。
这个功能与 Time#sub()
很相似,唯一的区别是它们返回一个新的 Time 实例。
比较
您可以通过比较方法比较两个时间。
$time1 = Time::create(1, 50, 0, 0); $time2 = Time::create(3, 0, 24, 0); // false $time1->isEqualTo($time2); $time1->eq($time2); // true $time1->isNotEqualTo($time2); $time1->neq($time2); // false $time1->isGreaterThan($time2); $time1->gt($time2); $time1->isGreaterThanOrEqualTo($time2); $time->gteq($time2); // true $time1->isLessThan($time2); $time1->lt($time2); $time1->isLessThanOrEqualTo($time2); $time->lteq($time2);