upyx/php-time

时间对象化的表示,仅表示时间(不包含日期、时区等)。

1.0.0 2019-12-12 18:07 UTC

This package is auto-updated.

Last update: 2024-09-13 05:01:43 UTC


README

Source Code Latest Version Software License PHP Version Build Status Coverage Status Total Downloads

带有微秒的时间对象化表示。它像没有日期、时区等内容的“整点时间”,但每24小时循环一次。

为什么不使用标准库中的 DateTime/DateTimeImmutable 呢?

它有不同的用途。DateTime 用于通过年代使用的日历(线性)时间。但这个库旨在表示每天的时间段。

让我们更深入地了解一下。东京的中午和纽约的中午在世界上是不同的时间。12月1日的中午和12月2日的中午是不同的时间。但中午仍然是12

仍然可以使用 DateTime 表示整点时间,但它有一些缺点。首先,它很复杂,因为它需要一个“零日期”。其次,由于日期的变化,比较和计算很困难。第三,时区转换可能导致错误。第四,它可能会与用作日历时间的 DateTime 类型混淆。

安装

首选的安装方法是使用 Composer。运行以下命令安装包并将其添加到项目的 composer.json 文件的要求中:

composer require upyx/php-time

用法

LocalTime 可以以三种方式创建

use Upyx\PhpTime\LocalTime;
$time1 = new LocalTime(10, 20, 30, 40000);
$time2 = LocalTime::fromDateTime(new DateTimeImmutable('10:20:30'));
$time3 = LocalTime::fromMicroseconds(3600000000);

有“添加”和“减去”方法

use Upyx\PhpTime\LocalTime;
$time1 = new LocalTime(10, 0);
$time2 = new LocalTime(13, 0);
var_dump($time1->cyclicAdd($time2)); // 23:00:00.000000
var_dump($time2->cyclicSubtract($time1)); // 03:00:00.000000
var_dump($time1->cyclicSubtract($time2)); // 21:00:00.000000

由于时间具有周期性,两个时间之间有两个距离。有一个方法可以计算最小距离

use Upyx\PhpTime\LocalTime;
$time1 = new LocalTime(2, 0);
$time2 = new LocalTime(12, 0);
$time3 = new LocalTime(22, 0);
var_dump($time1->calcDistance($time2)); // 10:00:00.000000
var_dump($time2->calcDistance($time3)); // 10:00:00.000000
var_dump($time1->calcDistance($time3)); // 04:00:00.000000

可以使用比较运算符。最小值是 "00:00:00.000000",最大值是 "23:59:59.999999"。

use Upyx\PhpTime\LocalTime;
$time1 = new LocalTime(10, 0);
$time2 = new LocalTime(13, 0);
var_dump($time1 < $time2); // true
var_dump($time1 <= $time2); // true
var_dump($time1 > $time2); // false
var_dump($time1 >= $time2); // false
var_dump($time1 <=> $time2); // -1

贡献

如果您有问题,请随意创建一个问题。如果您想发送给我一个 pull request,请先创建一个问题。

版权和许可证

upyx/php-time 库版权归 Sergey Rabochiy 所有,并许可在 MIT 许可证(MIT)下使用。有关更多信息,请参阅 LICENSE