当前位置:首页 > PHP教程 > php日期 > 列表

PHP获取特殊时间戳的方法整理

发布:smiling 来源: PHP粉丝网  添加日期:2023-06-23 17:20:09 浏览: 评论:0 

时间在我们日常的代码编写中会是经常出现的筛选或排序条件,尤其是一些特殊时间节点的时间显得尤为突出,例如昨天,当前日期,当前月份,当前季度,以及当前年份的开始以及结束的时间戳,今天对部分相对简便的方法进行了部分整理。

解决方案

话不多说,稍微进行分类,贴代码。

今天时间戳与日期

时间戳

当前天的时间戳直接使用当前时间格式,指定起始以及结束时间来实现快速拿到时间戳的效果。

$startTime = strtotime(date('Y-m-d').'00:00:00');

$overTime = strtotime(date('Y-m-d').'23:59:59');

日期格式

相应的,咱们可以直接字符串拼接实现日期格式的显示。

  1. //弱类型语言,直接拼接字符串 
  2.  $startDate=date('Y-m-d').' 00:00:00'
  3.  $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;

日期格式

方法一: 根据时间戳转日期格式

  1. //根据上面的时间戳进行格式转换 
  2.  $startDate=date("Y-m-d H:i:s",$startTime); 
  3.  $overDate =date("Y-m-d H:i:s",$overTime); 

新想法:根据首先获取当前天日期,然后使用date函数进行时间格式转换

  1. //获取当前日期的天数的数值减一之后就是昨天啦 
  2.  $time=date('d')-1; 
  3.  $startDate=date("Y-m-".$time." 00:00:00",time()); 
  4.  $overDate=date("Y-m-".$time." 23:59:59",time()); 

但是在月初时会出现日期为0的异常,除了进行判断,不知道有没有其他简便的方法可以解决,不然还是时间戳转日期格式比较简便,希望有简单解决办法的大佬给点新想法。

本周时间戳与日期

时间戳

date( )函数中 date(‘w’) 可以获取今天是本周第几天,通过简单处理就可以得到本周的起始以及结束时间。

这种思路和方法可以推广到上周的起始和结束时间。

方法一:

  1. //本周开始时间戳 
  2. $startTime = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y')); 
  3. //本周结束时间戳 
  4. $overTime = mktime(23,59,59,date('m'),date('d')-date('w')+7,date('y')); 

方法二:

  1. $nowDate = date("Y-m-d"); 
  2. $week = date('w',strtotime($nowDate)); 
  3. $startTime = strtotime("$nowDate -".($week ? $week - 1 : 6).' days');//本周第一天 
  4. $overTime = $start_time + 86400*7 -1; //本周最后一天 

日期格式

使用日期格式函数转换时间戳,也可以用上面的方法进行date()函数中格式,进行转换。

  1. //本周开始时间戳 
  2. $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y'))); 
  3. //本周结束时间戳 
  4. $overTime = date("Y-m-d H:i:s",mktime(23,59,59,date('m'),date('d')-date('w')+7,date('y'))); 

本月时间戳和日期

时间戳

  1. //本月起始时间时间戳 
  2. $startTime =mktime(0,0,0,date('m'),1,date('Y'));   
  3. //本月结束时间时间戳 
  4. $overTime =mktime(23,59,59,date('m'),date('t'),date('Y'));  

日期格式

使用date( )函数进行时间戳转换日期格式。

  1. //本月起始时间日期格式 
  2. $startTime = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),1,date('Y')));   
  3. //本月结束时间日期格式 
  4. $overTime = date("Y-m-d H:i:s",mktime(23,59,59,date('m'),date('t'),date('Y')));  

本季度时间戳和日期

时间戳

  1. //获取当前季度 
  2. $season = ceil((date('m'))/3); 
  3.  //当前季度开始时间戳 
  4. $startTime = mktime(00,00,00,$season*2+1,1,date('Y')); 
  5.  //获取当前季度结束时间戳 
  6. $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)

当前年时间戳和日期

时间戳

  1. //本年开始   
  2. $startTime  = strtotime(date("Y",time())."-1"."-1");  
  3. //本年结束 
  4. $overTime  = strtotime(date("Y",time())."-12"."-31");   

日期格式

  1. //本年开始   
  2. $startTime  = date("Y-m-d H:i:s",strtotime(date("Y",time())."-1"."-1")); 
  3. //本年结束 
  4. $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);//转换为时间戳

获取特定时间戳函数

  1. /**特定时间戳函数 
  2.  * @param $targetTime 
  3.  */ 
  4. function gettimestamp($targetTime){ 
  5.     switch ($targetTime){ 
  6.         case 'today'://今天 
  7.             $timeamp['start'] = strtotime(date('Y-m-d')); 
  8.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('+1 day'))); 
  9.             break
  10.         case 'yesterday'://昨天 
  11.             $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-1 day'))); 
  12.             $timeamp['over'] = strtotime(date('Y-m-d')); 
  13.             break
  14.         case 'beforyesterday'://前天 
  15.             $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-2 day'))); 
  16.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('-1 day'))); 
  17.             break
  18.         case 'beforweek'://本周 
  19.             $timeamp['start'] = strtotime(date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")))); 
  20.             $timeamp['over'] = strtotime(date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")))); 
  21.             break
  22.         case 'nowmonth'://本月 
  23.             $timeamp['start'] = strtotime(date('Y-m-01')); 
  24.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('+1 day'))); 
  25.             break
  26.         case 'permonth'://上月 
  27.             $timeamp['start'] = strtotime(date('Y-m-01',strtotime('-1 month'))); 
  28.             $timeamp['over'] = strtotime(date('Y-m-01')); 
  29.             break
  30.         case 'preweek'://上周 注意我们是从周一开始算 
  31.             $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-2 week Monday'))); 
  32.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('-1 week Monday +1 day'))); 
  33.             break
  34.         case 'nowweek'://本周 
  35.             $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-1 week Monday'))); 
  36.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('+1 day'))); 
  37.             break
  38.         case 'preday'://30 
  39.             $timeamp['start'] = strtotime(date('Y-m-d'),strtotime($param.' day')); 
  40.             $timeamp['end'] = strtotime(date('Y-m-d')); 
  41.             break
  42.         case 'nextday'://30 
  43.             $timeamp['start'] = strtotime(date('Y-m-d')); 
  44.             $timeamp['over'] = strtotime(date('Y-m-d'),strtotime($param.' day')); 
  45.             break
  46.         case 'preyear'://去年 
  47.             $timeamp['start'] = strtotime(date('Y-01-01',strtotime('-1 year'))); 
  48.             $timeamp['over'] = strtotime(date('Y-12-31',strtotime('-1 year'))); 
  49.             break
  50.         case 'nowyear'://今年 
  51.             $timeamp['start'] = strtotime(date('Y-01-01')); 
  52.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('+1 day'))); 
  53.             break
  54.         case 'quarter'://季度 
  55.             $quarter = ceil((date('m'))/3); 
  56.             $timeamp['start'] = mktime(0, 0, 0,$quarter*3-2,1,date('Y')); 
  57.             $timeamp['over'] = mktime(0, 0, 0,$quarter*3+1,1,date('Y')); 
  58.             break
  59.         default
  60.             $timeamp['start'] = strtotime(date('Y-m-d')); 
  61.             $timeamp['over'] = strtotime(date('Y-m-d',strtotime('+1 day'))); 
  62.             break
  63.     } 
  64.     return $timeamp

写在最后

小发现:在进行测试的时候发现了 date()函数比较有意思的地方,可以直接拼接结果,当你把y-m-d h:i:s中的一部分写死后仍然是可以执行的,结果就是你写死的数值,后面有机会深入研究下底层代码,好像是在C语言中,结构体来实现日期以及时间戳的格式,传参是进行了判断,所以可以达到不同形式的显示。strtotime() 函数也很巧妙,牛哇牛哇。

Tags: PHP获取特殊时间戳

分享到: