PHP獲取特殊時間戳的方法整理
目錄
- 問題描述
- 解決方案
- 今天時間戳與日期
- 時間戳
- 日期格式
- 昨天時間戳與日期
- 日期格式
- 本周時間戳與日期
- 時間戳
- 日期格式
- 本月時間戳和日期
- 時間戳
- 日期格式
- 本季度時間戳和日期
- 時間戳
- 日期格式
- 當前年時間戳和日期
- 時間戳
- 日期格式
- strtotime函數獲取描述對應時間
- 明天當前時間
- 昨天當前時間
- 下個星期當前時間
- 上個星期當前時間
- 下星期幾當前時間
- 上星期幾當前時間
- 時間戳轉日期格式
- 日期格式轉時間戳
- 獲取特定時間戳函數
- 寫在最后
問題描述
時間在我們日常的代碼編寫中會是經常出現的篩選或排序條件,尤其是一些特殊時間節點的時間顯得尤為突出,例如昨天,當前日期,當前月份,當前季度,以及當前年份的開始以及結束的時間戳,今天對部分相對簡便的方法進行了部分整理。
解決方案
話不多說,稍微進行分類,貼代碼。
今天時間戳與日期
時間戳
當前天的時間戳直接使用當前時間格式,指定起始以及結束時間來實現快速拿到時間戳的效果。
$startTime = strtotime(date("Y-m-d")."00:00:00"); $overTime = strtotime(date("Y-m-d")."23:59:59");
日期格式
相應的,咱們可以直接字符串拼接實現日期格式的顯示。
//弱類型語言,直接拼接字符串 $startDate=date("Y-m-d")." 00:00:00"; $overDate=date("Y-m-d")." 00:00:00";
昨天時間戳與日期
時間戳
$startTime = mktime(0,0,0,date("m"),date("d")-1,date("Y")); $overTime = mktime(0,0,0,date("m"),date("d"),date("Y"))-1;
日期格式
方法一: 根據時間戳轉日期格式
//根據上面的時間戳進行格式轉換 $startDate=date("Y-m-d H:i:s",$startTime); $overDate =date("Y-m-d H:i:s",$overTime);
新想法:根據首先獲取當前天日期,然后使用date函數進行時間格式轉換
//獲取當前日期的天數的數值減一之后就是昨天啦 $time=date("d")-1; $startDate=date("Y-m-".$time." 00:00:00",time()); $overDate=date("Y-m-".$time." 23:59:59",time());
但是在月初時會出現日期為0的異常,除了進行判斷,不知道有沒有其他簡便的方法可以解決,不然還是時間戳轉日期格式比較簡便,希望有簡單解決辦法的大佬給點新想法。
本周時間戳與日期
時間戳
date( )函數中 date(‘w’) 可以獲取今天是本周第幾天,通過簡單處理就可以得到本周的起始以及結束時間。
這種思路和方法可以推廣到上周的起始和結束時間。
方法一:
//本周開始時間戳 $startTime = mktime(0,0,0,date("m"),date("d")-date("w")+1,date("y")); //本周結束時間戳 $overTime = mktime(23,59,59,date("m"),date("d")-date("w")+7,date("y"));
方法二:
$nowDate = date("Y-m-d"); $week = date("w",strtotime($nowDate)); $startTime = strtotime("$nowDate -".($week ? $week - 1 : 6)." days");//本周第一天 $overTime = $start_time + 86400*7 -1; //本周最后一天
日期格式
使用日期格式函數轉換時間戳,也可以用上面的方法進行date()函數中格式,進行轉換。
//本周開始時間戳 $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date("m"),date("d")-date("w")+1,date("y"))); //本周結束時間戳 $overTime = date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("y")));
本月時間戳和日期
時間戳
//本月起始時間時間戳 $startTime =mktime(0,0,0,date("m"),1,date("Y")); //本月結束時間時間戳 $overTime =mktime(23,59,59,date("m"),date("t"),date("Y"));
日期格式
使用date( )函數進行時間戳轉換日期格式。
//本月起始時間日期格式 $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date("m"),1,date("Y"))); //本月結束時間日期格式 $overTime = date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("t"),date("Y")));
本季度時間戳和日期
時間戳
//獲取當前季度 $season = ceil((date("m"))/3); //當前季度開始時間戳 $startTime = mktime(00,00,00,$season*2+1,1,date("Y")); //獲取當前季度結束時間戳 $overTime = mktime(23,59,59,$season*3,date("t",mktime(0, 0 , 0,$season*3,1,date("Y"))),date("Y"));
日期格式
把上面的時間戳轉換為日期格式
date("Y-m-d",$startTime) date("Y-m-d",$overTime)
當前年時間戳和日期
時間戳
//本年開始 $startTime = strtotime(date("Y",time())."-1"."-1"); //本年結束 $overTime = strtotime(date("Y",time())."-12"."-31");
日期格式
//本年開始 $startTime = date("Y-m-d H:i:s",strtotime(date("Y",time())."-1"."-1")); //本年結束 $overTime = date("Y-m-d H:i:s",strtotime(date("Y",time())."-12"."-31"));
strtotime函數獲取描述對應時間
明天當前時間
strtotime("+1 day")//時間戳 date("Y-m-d H:i:s",strtotime("+1 day"))//日期格式
昨天當前時間
strtotime("-1 day")//時間戳 date("Y-m-d H:i:s",strtotime("-1 day"))//日期格式
下個星期當前時間
strtotime("+1 week")//時間戳 date("Y-m-d H:i:s",strtotime("+1 week"))//日期格式
上個星期當前時間
strtotime("-1 week")//時間戳 date("Y-m-d H:i:s",strtotime("-1 week"))//日期格式
下星期幾當前時間
strtotime("next Thursday")//時間戳 date("Y-m-d H:i:s",strtotime("next Thursday"))//日期格式
上星期幾當前時間
strtotime("last Thursday")//時間戳 date("Y-m-d H:i:s",strtotime("last Thursday"))//日期格式
時間戳轉日期格式
$timestamp =1664170375;//當前時間戳 date("Y-m-d H:i:s",$timestamp);//轉換為日期格式
日期格式轉時間戳
$time = "2022-09-26 23:31:59";//時間格式參數 strtotime($time);//轉換為時間戳
獲取特定時間戳函數
/**特定時間戳函數 * @param $targetTime */ function gettimestamp($targetTime){ switch ($targetTime){ case "today"://今天 $timeamp["start"] = strtotime(date("Y-m-d")); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("+1 day"))); break; case "yesterday"://昨天 $timeamp["start"] = strtotime(date("Y-m-d",strtotime("-1 day"))); $timeamp["over"] = strtotime(date("Y-m-d")); break; case "beforyesterday"://前天 $timeamp["start"] = strtotime(date("Y-m-d",strtotime("-2 day"))); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("-1 day"))); break; case "beforweek"://本周 $timeamp["start"] = strtotime(date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")))); $timeamp["over"] = strtotime(date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")))); break; case "nowmonth"://本月 $timeamp["start"] = strtotime(date("Y-m-01")); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("+1 day"))); break; case "permonth"://上月 $timeamp["start"] = strtotime(date("Y-m-01",strtotime("-1 month"))); $timeamp["over"] = strtotime(date("Y-m-01")); break; case "preweek"://上周 注意我們是從周一開始算 $timeamp["start"] = strtotime(date("Y-m-d",strtotime("-2 week Monday"))); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("-1 week Monday +1 day"))); break; case "nowweek"://本周 $timeamp["start"] = strtotime(date("Y-m-d",strtotime("-1 week Monday"))); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("+1 day"))); break; case "preday"://30 $timeamp["start"] = strtotime(date("Y-m-d"),strtotime($param." day")); $timeamp["end"] = strtotime(date("Y-m-d")); break; case "nextday"://30 $timeamp["start"] = strtotime(date("Y-m-d")); $timeamp["over"] = strtotime(date("Y-m-d"),strtotime($param." day")); break; case "preyear"://去年 $timeamp["start"] = strtotime(date("Y-01-01",strtotime("-1 year"))); $timeamp["over"] = strtotime(date("Y-12-31",strtotime("-1 year"))); break; case "nowyear"://今年 $timeamp["start"] = strtotime(date("Y-01-01")); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("+1 day"))); break; case "quarter"://季度 $quarter = ceil((date("m"))/3); $timeamp["start"] = mktime(0, 0, 0,$quarter*3-2,1,date("Y")); $timeamp["over"] = mktime(0, 0, 0,$quarter*3+1,1,date("Y")); break; default: $timeamp["start"] = strtotime(date("Y-m-d")); $timeamp["over"] = strtotime(date("Y-m-d",strtotime("+1 day"))); break; } return $timeamp; }
寫在最后
小發現:在進行測試的時候發現了 date()函數比較有意思的地方,可以直接拼接結果,當你把y-m-d h:i:s中的一部分寫死后仍然是可以執行的,結果就是你寫死的數值,后面有機會深入研究下底層代碼,好像是在C語言中,結構體來實現日期以及時間戳的格式,傳參是進行了判斷,所以可以達到不同形式的顯示。strtotime() 函數也很巧妙,牛哇牛哇
到此這篇關于PHP獲取特殊時間戳的方法整理的文章就介紹到這了,更多相關PHP獲取特殊時間戳內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
