PHP獲取特殊時間戳的方法整理
問題描述
時間在我們?nèi)粘5拇a編寫中會是經(jīng)常出現(xiàn)的篩選或排序條件,尤其是一些特殊時間節(jié)點(diǎn)的時間顯得尤為突出,例如昨天,當(dāng)前日期,當(dāng)前月份,當(dāng)前季度,以及當(dāng)前年份的開始以及結(jié)束的時間戳,今天對部分相對簡便的方法進(jìn)行了部分整理。
解決方案
話不多說,稍微進(jìn)行分類,貼代碼。
今天時間戳與日期
時間戳
當(dāng)前天的時間戳直接使用當(dāng)前時間格式,指定起始以及結(jié)束時間來實(shí)現(xiàn)快速拿到時間戳的效果。
$startTime = strtotime(date('Y-m-d').'00:00:00'); $overTime = strtotime(date('Y-m-d').'23:59:59');
日期格式
相應(yīng)的,咱們可以直接字符串拼接實(shí)現(xiàn)日期格式的顯示。
//弱類型語言,直接拼接字符串 $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;
日期格式
方法一: 根據(jù)時間戳轉(zhuǎn)日期格式
//根據(jù)上面的時間戳進(jìn)行格式轉(zhuǎn)換 $startDate=date("Y-m-d H:i:s",$startTime); $overDate =date("Y-m-d H:i:s",$overTime);
新想法:根據(jù)首先獲取當(dāng)前天日期,然后使用date函數(shù)進(jìn)行時間格式轉(zhuǎn)換
//獲取當(dāng)前日期的天數(shù)的數(shù)值減一之后就是昨天啦 $time=date('d')-1; $startDate=date("Y-m-".$time." 00:00:00",time()); $overDate=date("Y-m-".$time." 23:59:59",time());
但是在月初時會出現(xiàn)日期為0的異常,除了進(jìn)行判斷,不知道有沒有其他簡便的方法可以解決,不然還是時間戳轉(zhuǎn)日期格式比較簡便,希望有簡單解決辦法的大佬給點(diǎn)新想法。
本周時間戳與日期
時間戳
date( )函數(shù)中 date(‘w’) 可以獲取今天是本周第幾天,通過簡單處理就可以得到本周的起始以及結(jié)束時間。
這種思路和方法可以推廣到上周的起始和結(jié)束時間。
方法一:
//本周開始時間戳 $startTime = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y')); //本周結(jié)束時間戳 $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; //本周最后一天
日期格式
使用日期格式函數(shù)轉(zhuǎn)換時間戳,也可以用上面的方法進(jìn)行date()函數(shù)中格式,進(jìn)行轉(zhuǎn)換。
//本周開始時間戳 $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y'))); //本周結(jié)束時間戳 $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')); //本月結(jié)束時間時間戳 $overTime =mktime(23,59,59,date('m'),date('t'),date('Y'));
日期格式
使用date( )函數(shù)進(jìn)行時間戳轉(zhuǎn)換日期格式。
//本月起始時間日期格式 $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),1,date('Y'))); //本月結(jié)束時間日期格式 $overTime = date("Y-m-d H:i:s",mktime(23,59,59,date('m'),date('t'),date('Y')));
本季度時間戳和日期
時間戳
//獲取當(dāng)前季度 $season = ceil((date('m'))/3); //當(dāng)前季度開始時間戳 $startTime = mktime(00,00,00,$season*2+1,1,date('Y')); //獲取當(dāng)前季度結(jié)束時間戳 $overTime = mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'));
日期格式
把上面的時間戳轉(zhuǎn)換為日期格式
date("Y-m-d",$startTime) date("Y-m-d",$overTime)
當(dāng)前年時間戳和日期
時間戳
//本年開始 $startTime = strtotime(date("Y",time())."-1"."-1"); //本年結(jié)束 $overTime = strtotime(date("Y",time())."-12"."-31");
日期格式
//本年開始 $startTime = date("Y-m-d H:i:s",strtotime(date("Y",time())."-1"."-1")); //本年結(jié)束 $overTime = date("Y-m-d H:i:s",strtotime(date("Y",time())."-12"."-31"));
strtotime函數(shù)獲取描述對應(yīng)時間
明天當(dāng)前時間
strtotime("+1 day")//時間戳 date("Y-m-d H:i:s",strtotime("+1 day"))//日期格式
昨天當(dāng)前時間
strtotime("-1 day")//時間戳 date("Y-m-d H:i:s",strtotime("-1 day"))//日期格式
下個星期當(dāng)前時間
strtotime("+1 week")//時間戳 date("Y-m-d H:i:s",strtotime("+1 week"))//日期格式
上個星期當(dāng)前時間
strtotime("-1 week")//時間戳 date("Y-m-d H:i:s",strtotime("-1 week"))//日期格式
下星期幾當(dāng)前時間
strtotime("next Thursday")//時間戳 date("Y-m-d H:i:s",strtotime("next Thursday"))//日期格式
上星期幾當(dāng)前時間
strtotime("last Thursday")//時間戳 date("Y-m-d H:i:s",strtotime("last Thursday"))//日期格式
時間戳轉(zhuǎn)日期格式
$timestamp =1664170375;//當(dāng)前時間戳 date("Y-m-d H:i:s",$timestamp);//轉(zhuǎn)換為日期格式
日期格式轉(zhuǎn)時間戳
$time = '2022-09-26 23:31:59';//時間格式參數(shù) strtotime($time);//轉(zhuǎn)換為時間戳
獲取特定時間戳函數(shù)
/**特定時間戳函數(shù) * @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; }
寫在最后
小發(fā)現(xiàn):在進(jìn)行測試的時候發(fā)現(xiàn)了 date()函數(shù)比較有意思的地方,可以直接拼接結(jié)果,當(dāng)你把y-m-d h:i:s中的一部分寫死后仍然是可以執(zhí)行的,結(jié)果就是你寫死的數(shù)值,后面有機(jī)會深入研究下底層代碼,好像是在C語言中,結(jié)構(gòu)體來實(shí)現(xiàn)日期以及時間戳的格式,傳參是進(jìn)行了判斷,所以可以達(dá)到不同形式的顯示。strtotime() 函數(shù)也很巧妙,牛哇牛哇
到此這篇關(guān)于PHP獲取特殊時間戳的方法整理的文章就介紹到這了,更多相關(guān)PHP獲取特殊時間戳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的類庫用法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的類庫用法,結(jié)合實(shí)例形式分析了php操作Excel數(shù)據(jù)的讀取與導(dǎo)出操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10jq的get傳參數(shù)在utf-8中亂碼問題的解決php版
在php下用jquery傳參出現(xiàn)亂碼的解決方法2008-07-07PHP動態(tài)編譯出現(xiàn)Cannot find autoconf的解決方法
這篇文章主要介紹了PHP動態(tài)編譯出現(xiàn)Cannot find autoconf的解決方法,是PHP程序設(shè)計中經(jīng)常會遇到的問題,需要的朋友可以參考下2014-11-11PHP函數(shù)用法詳解【初始化、嵌套、內(nèi)置函數(shù)等】
這篇文章主要介紹了PHP函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了PHP函數(shù)初始化、嵌套、內(nèi)置函數(shù)等相關(guān)定義、原理與操作注意事項(xiàng),需要的朋友可以參考下2020-06-06php簡單實(shí)現(xiàn)多維數(shù)組排序的方法
這篇文章主要介紹了php簡單實(shí)現(xiàn)多維數(shù)組排序的方法,涉及php數(shù)組的遍歷及array_multisort函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下2016-09-09