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');
日期格式
相应的,咱们可以直接字符串拼接实现日期格式的显示。
- //弱类型语言,直接拼接字符串
- $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() 函数也很巧妙,牛哇牛哇。
Tags: PHP获取特殊时间戳
- 上一篇:php获取当前时间戳、日期并精确到毫秒(三种方法)
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)