Stories

Detail Return Return

⏱️TimeHelper——一個簡單快捷的PHP日期時間助手類庫 - Stories Detail

TimeHelper 是一個簡單易用的PHP時間日期助手類庫,可以快速實現常用的時間日期操作,比如獲取指定時間的秒數,獲取友好的時間格式,判斷時間範圍,計算兩個時間相差值,返回N小時/天/星期/月/年前或者後的時間戳等等

🧩特性

  • 簡單易用: 不依賴任何擴展,開箱即用
  • 化繁為簡: 所有方法都可以傳入任意類型的時間日期格式時間戳
  • 快捷高效: 所有操作只需要一個靜態方法即可完成
  • 長期維護: 作者為自由職業者,保證項目的長期穩定持續更新

🚀安裝

通過Composer導入類庫

composer require zjkal/time-helper

🌈使用文檔

首先在類中引用TimeHelper助手類

use zjkal\TimeHelper;

1. 獲取需要的秒數

一般用於設置緩存時間,設置結束時間等

//返回到今天晚上零點之前的秒數
TimeHelper::secondEndToday();

//返回N分鐘的秒數(默認為1分鐘)
TimeHelper::secondMinute(5);

//返回N小時的秒數(默認為1小時)
TimeHelper::secondHour(2);

//返回N天的秒數(默認為1天)
TimeHelper::secondDay(10);

//返回N周的秒數(默認為1周)
TimeHelper::secondWeek(4);

2. 返回友好的日期格式,比如N秒前,N分鐘前,N小時前等等

一般用於社交類平台,評論,論壇等

//一共2個參數:
//第1個參數傳入字符串類型的時間或者時間戳都可以,
//第2個參數為語言(默認為中文,需要英文請傳入en)
TimeHelper::toFriendly('2022-3-2 10:15:33');
//英文
TimeHelper::toFriendly(1646186290, '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::getWeek('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');

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.獲取當前秒級/毫秒級/微秒級/納秒級的時間戳

生成訂單號或者與其他編程語言對接時可能會用到

//獲取秒級的時間戳,可用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);

所支持的時區列表請參考時區列表

10.國內節假日/工作日相關 🔥

專門針對國內的節假日進行判斷,目前包含2020年-2024年的節假日數據,後續也會持續更新.
為了便於維護,另起了一個類ChinaHoliday,同樣可以傳入任意類型的時間格式或時間戳

use zjkal\ChinaHoliday;

//判斷指定日期是否為國內的工作日
ChinaHoliday::isWorkday('2023-01-23');

//判斷指定日期是否為國內的節假日
ChinaHoliday::isHoliday(1646360133);
特別説明: 所有時間的方法都可以傳入任意格式的時間或者時間戳, 但是有一點請注意 m/d/y 或 d-m-y
格式的日期,如果分隔符是斜線(/),則使用美洲的 m/d/y 格式。如果分隔符是橫槓(-)或者點(.),則使用歐洲的 d-m-y
格式。為了避免潛在的錯誤,您應該儘可能使用 YYYY-MM-DD 格式或其他格式.

📖開源協議

TimeHelper遵循MIT開源協議, 意味着您無需任何授權,即可免費將TimeHelper應用到您的項目中

user avatar wujingquan Avatar big_cat Avatar headofhouchang Avatar phpercode Avatar buildyuan Avatar biliangxianting Avatar 49u7s8yz Avatar huifeideniao Avatar junxiudetuoba Avatar witersen Avatar kip_67231fa160bbc Avatar _kysou Avatar
Favorites 15 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.