轻量级的PHP日期时间类库之TimeHelper

本文中的相关环境版本信息如下:

TimeHelper:1.1.5

PHP:7.4.13

正文开始

TimeHelper什么

TimeHelper是一个轻量级别的简单易用的PHP时间日期助手类库,可以快速实现常用的时间日期操作、比如获取指定时间的秒数、获取友好的时间格式、判断时间范围、计算两个时间相差值、返回N小时/天/星期/月/年前或者后的时间戳等等......。 同时 该类库支持使用composer进行安装。


主要特性有哪些?

简单易用:不依赖任何扩展,开箱即用。

化繁为简:所有方法都可以传入任意类型的时间日期格式或时间戳。

快捷高效:所有操作只需要一个静态方法即可完成。

长期维护:作者为自由职业者,保证项目的长期稳定和持续更新。


为什么不是Carbon?

毫无疑问,carbon作为PHP时间日期助手类库,是十分强大的,但是我觉得还是不够简洁。因此TimeHelper出现了。个人观点,不喜勿喷。


开源初衷是什么?

时间日期的操作,是经常会用到的。刚开始只是自己使用,后来做成composer包分享给朋友们以后,反响还不错。所以决定把文档完善起来,希望让更多的程序Yuan不需要重复造轮子。


安装TimeHelper:

composer require zjkal/time-helper

1、获取需要的秒数

提示:一般用于设置缓存时间,设置结束时间等。

TimeHelper::secondEndToday(); //获取从此刻 到今天晚上零点之前的秒数

TimeHelper::secondHour(2); //获取N小时的秒数,这里是获取2个小时的秒数。 不传参数的话 默认获取一小时的秒数

TimeHelper::secondMinute(3); //获取N分钟的秒数,这里是获取3分钟的秒数。不传参数的话 默认获取1分钟的秒数

TimeHelper::secondDay(2); //获取N天的秒数,这里获是获取2天的秒数。不传参数的话 默认获取1天的秒数

TimeHelper::secondWeek(2); //获取N周的秒数,这里获是获取2周的秒数。不传参数的话 默认获取1周的秒数

2、友好的日期格式

提示:一般用于社交类平台、评论、论坛等。

TimeHelper::toFriendly("2022-3-17 10:15:33"); //返回友好的日期格式,如N秒前、N分钟前、N小时前、N年前。toFriendly的第二个参数表示中英文,默认中文 如需返回英文 则传en

3、判断时间范围

//判断日期是否为今天
TimeHelper::isToday('2020-4-10 23:01:11'); 

//判断日期是否为本周
TimeHelper::isThisWeek('2020-5-1');

//判断日期是否为本月
TimeHelper::isThisMonth(1586451741);

//判断日期是否为今年
TimeHelper::isThisYear('Apr 11, 2020');

//判断指定时间是星期几,不传默认为当前时间. 返回值为1-7,1为星期一......7为星期日
TimeHelper::getWeekDay('2022-11-27');

//判断指定时间是否为平常日(周一到周五)
TimeHelper::isWeekday('2023-03-08');

//判断指定时间是否为周末(周六和周日)
TimeHelper::isWeekend(1586451741);

4、计算两个时间之间的相差值

如果只传入一个参数,则默认与当前时间进行比较。

//计算两个日期相差天数
TimeHelper::diffDays('2022-4-10 23:01:11','Apr 11, 2020');

//计算两个日期相差周数
TimeHelper::diffWeeks('2022-4-10 23:01:11');

//计算两个日期相差月数
TimeHelper::diffMonths(1586451741,'Apr 11, 2020');

//计算两个日期相差年数
TimeHelper::diffYears('2022-4-10 23:01:11','Apr 11, 2020');

//比较两个时间的大小,如果第二个参数为空,则与当前时间比较
//第一个时间大于第二个时间则返回1,小于则返回-1,相等时则返回0
TimeHelper::compare('2022-4-10 23:01:11','Apr 11, 2020');

5、获取前后时间戳(返回N小时/天/星期/月/年前或者后的时间戳)

只传入1个参数以当前时间计算,传入第2个参数则以该时间计算,传入第3个参数为true的话 则时间进行取整。

//返回指定时间3分钟前0秒的时间戳
TimeHelper::beforeMinute(3,'2022-3-2 10:15:33',true);

//返回当前时间5分钟后的时间戳
TimeHelper::afterMinute(5);

//返回指定时间1小时前的时间戳(请注意此用法为php8之后的用法)
TimeHelper::beforeHour(datetime:'Apr 11, 2020');

//返回2小时后的时间戳
TimeHelper::afterHour(2);

//返回15天前0点的时间戳
TimeHelper::beforeDay(15,null,true);

//返回15天后的时间戳
TimeHelper::afterDay(15);

//返回指定时间2星期前的时间戳
TimeHelper::beforeWeek(2,'2022-4-10 23:01:11');

//返回指定时间10星期后的时间戳
TimeHelper::afterWeek(10,1646360133);

//返回指定时间1个月前的时间戳(请注意此用法为php8之后的用法)
TimeHelper::beforeMonth(datetime:1646360133);

//返回5个月后的时间戳
TimeHelper::afterMonth(5);

//返回指定时间3年前的时间戳
TimeHelper::beforeYear(3,'2022-7-11');

//返回2年后的时间戳
TimeHelper::afterYear(2);

6、获取高精度时间戳(获取当前秒级/毫秒级/微秒级/纳秒级的时间戳)

提示:生成订单号或者与其它编程语言对接时可能会用到。

//获取秒级的时间戳,可用php内置的time()函数进行替代
TimeHelper::getTimestamp();

//获取毫秒级的时间戳
TimeHelper::getMilliTimestamp();

//获取微秒级的时间戳
TimeHelper::getMicroTimestamp();

//获取纳秒级的时间戳
TimeHelper::getNanoTimestamp();

7、日期转换

提示:用于爬虫爬取网页或第三方程序对接时,时间格式不统一的转换。

//将任意格式的时间转换为指定格式
//第一个参数是时间格式,与系统函数date()的格式保持一致
//第二个参数则是任意格式的时间日期,不传则默认为当前时间,可用系统函数date()代替
TimeHelper::format('Y-m-d H:i:s','May 3, 2022');

//判断一个字符串是否为时间戳,是返回true,否返回false
TimeHelper::isTimestamp(1646360133);

//将任意时间类型的字符串转为时间戳
TimeHelper::toTimestamp('Apr 11, 2020');

8、平闰年相关

提示:比原生方法使用起来更方便。

//判断是否为闰年,是返回true,否返回false
TimeHelper::isLeapYear('2020-3-2 10:15:33');

//判断该日期的当年有多少天
TimeHelper::daysInYear(1646360133);

//判断该日期的当月有多少天
TimeHelper::daysInMonth('Apr 11, 2020');

9、时区相关设置

提示:主要提供获取不同时区的时间和转换不同时区的时间的方法。

//将任意格式的时间或时间戳转换为指定时区的时间
//第一个参数为要转换的目标时区
//第二个参数为原时区,不传则默认为当前时区
//第三个参数为任意格式的时间或时间戳,不传则默认为当前时间
//第四个参数为时间格式,与系统函数date()的格式保持一致,不传则默认为Y-m-d H:i:s

TimeHelper::timezoneFormat('Europe/London', 'Asia/Shanghai', '2023-8-15 19:16:43', 'H:i:s');

//获得当前洛杉矶的时间
TimeHelper::timezoneFormat('America/Los_Angeles');

//将洛杉矶时间转换为伦敦时间
TimeHelper::timezoneFormat('Europe/London', 'America/Los_Angeles', 'Aug 15, 2023 10:15:33', 'H:i:s');

//将时间戳转换为伦敦时间
TimeHelper::timezoneFormat('Europe/London', null, 1692097543);

特别提示:支持时区列表请参考PHP支持的时区列表

10、判断国内节假日/工作日相关

提示:专门针对国内的节假日进行判断,目前包含2020年-2024年的节假日数据,后续也会持续更新。为了便于维护和使用,另起一个类ChinaHoliday,ChinaHoliday类 同样可以传入任意类型的时间格式或时间戳

//判断指定日期是否为国内的工作日
ChinaHoliday::isWorkday('2023-01-23');

//判断指定日期是否为国内的节假日
ChinaHoliday::isHoliday(1646360133);

最后的 特别说明:

1、所有时间的方法都可以传入任意格式的字符串时间或者时间戳,但是有一点请注意 m/d/y 或 d-m-y 格式的日期,如果分隔符是斜线(/),则使用美洲的 m/d/y 格式。如果分隔符是横杠(-)或者点(.),则使用欧洲的 d-m-y 格式。为了避免潜在的错误,您应该尽可能使用 YYYY-MM-DD 格式或其他格式。


2、点击我进入TimeHelper的官方地址。



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading