prokki / ext-datetime
扩展了常见的 PHP DateTime 对象,添加了许多有用的方法。
Requires
- php: >=7.3.0
Requires (Dev)
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2024-09-29 06:02:37 UTC
README
扩展了原生 datetime 对象(\DateTime 和 \DateTimeImmutable)并添加了许多有用的方法。
大多数新方法都是现有功能的快捷方式。但如果需要处理大量的日期和时间操作,这些方法将帮助您节省时间和代码。
所有新方法都支持 方法链。
目录
要求
必须使用 PHP v7.3。
集成
请通过 composer 安装。
composer require prokki/ext-datetime "^0.0"
使用
ExtDateTime/DateTime 和 ExtDateTime/DateTimeImmutable 的类及其实例可以像原生 datetime 对象/类一样使用。
示例
use ExtDateTime\DateTime; use ExtDateTime\DateTimeImmutable; // create a datetime object $dateTime = new DateTime("now"); // create an immutable datetime object $dateTimeImmutable = new DateTimeImmutable("now");
静态初始化
与原生对象类似,还有几种其他方式可以创建 datetime 对象。
所有静态方法都可以用于实现 方法链。
create()
使用静态构造函数 create()
立即启用链式调用。
use ExtDateTime\DateTime; // create a datetime object // and use chaining immediately $dateTime = DateTime::create("now") ->addHours(5) ->addDays(5) ;
current()
静态构造函数 current()
返回一个包含当前日期/时间的 datetime 对象。但与 DateTime::create("now")
不同,此方法返回的对象具有额外的微时间。
use ExtDateTime\DateTime; $currentMicroseconds = DateTime::current()->format("u"); // output example 654321 $noMicroseconds = DateTime::create("now")->format("u"); // output always 000000
createFromObject()
从任何实现 DateTimeInterface 的 datetime 对象创建新对象。
use ExtDateTime\DateTimeImmutable; // create an immutable datetime object from a native non-immutable object $datetime = DateTimeImmutable::createFromObject(new \DateTime());
克隆
两种新方法添加了在克隆对象后直接使用链式调用的功能。
duplicate()
此方法只是 clone
的包装函数。
use ExtDateTime\DateTime; // create a datetime object $datetime = DateTime::current(); // clone the datetime object and proceed like usual with chaining $clone = $datetime->duplicate() ->addHours(5) ->addDays(5) ;
toImmutable() / toMutable()
除了使用静态构造函数(DateTime::createFromImmutable 或 DateTimeImmutable::createFromMutable)外,还可以使用这些新的非静态方法。
use ExtDateTime\DateTime; // create a datetime object $datetime = DateTime::current(); $clonedImmutable = $datetime->toImmutable(); // only available in class DateTime $clonedMutable = $clonedImmutable->toMutable(); // only available in class DateTimeImmutable
操作
大多数新方法都是简化的,以避免在您的代码中重新初始化必要的参数。
addHours() / subHours()
为 datetime 对象添加或减去小时。
use ExtDateTime\DateTime; // create a datetime object and add 10 hours $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->addHours(10) ->format("Y-m-d h:i:s"); // "2020-07-30 22:35:17" // create a datetime object and subtracts 10 hours $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->subHours(10) ->format("Y-m-d h:i:s"); // "2020-07-30 02:35:17"
addDays() / subHours()
为 datetime 对象添加或减去天数。
use ExtDateTime\DateTime; // create a datetime object and add 10 days $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->addDays(10) ->format("Y-m-d h:i:s"); // "2020-08-09 22:35:17" // create a datetime object and subtracts 10 days $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->subDays(10) ->format("Y-m-d h:i:s"); // "2020-07-20 02:35:17"
addMonth() / subMonth()
为 datetime 对象添加或减去月份。
注意:这些方法的行为与预期的背景函数添加天数不同。如果当前日期是月份的最后一天(31/30/29/28),而目标月份的天数少于当前月份,则日期将被设置为目标月份的最后一天。
示例:datetime 对象是
2017-01-30 17:00:00
并且您想要添加 1 个月,则结果将是
2017-02-28 17:00:00
use ExtDateTime\DateTime; // create a datetime object and add 10 months $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->addMonth(10) ->format("Y-m-d h:i:s"); // "2020-08-09 22:35:17" // create a datetime object and subtracts 10 months $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->subMonth(10) ->format("Y-m-d h:i:s"); // "2020-07-20 02:35:17"
即时设置方法
toEndOfDay()
将时间设置为一天结束(23:59:59)。
use ExtDateTime\DateTime; // create a datetime object and sets the time to the end of the day $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->toEndOfDay(10) ->format("Y-m-d h:i:s"); // "2020-07-30 23:59:59"
toNoon()
将时间设置为中午(12:00:00)。
use ExtDateTime\DateTime; // create a datetime object and sets the time to noon $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->toNoon(10) ->format("Y-m-d h:i:s"); // "2020-07-30 12:00:00"
toStartOfDay()
将时间设置为一天的开始(00:00:00)。
use ExtDateTime\DateTime; // create a datetime object and sets the time the start of the day $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->toStartOfDay(10) ->format("Y-m-d h:i:s"); // "2020-07-30 00:00:00"
toStartOfMonth()
将日期设置为每月的第一天,并将时间设置为一天的开始(00:00:00)。
use ExtDateTime\DateTime; // create a datetime object and sets the date to the first day of the month $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->toStartOfMonth() ->format("Y-m-d h:i:s"); // "2020-07-01 00:00:00"
toEndOfMonth()
将日期设置为每月的最后一天,并将时间设置为一天的结束(23:59:59)。
use ExtDateTime\DateTime; // create a datetime object and sets the date to the last day of the month $datetimeFuture = DateTime::create("2020-07-30 12:35:17") ->toEndOfMonth() ->format("Y-m-d h:i:s"); // "2020-07-31 23:59:59"