iarcadia/time

PHP 时间/时长库...又是。

1.0.1 2020-01-06 13:28 UTC

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);