定制软件开发PHP获取今天,昨天,本周,本月,季度,年份等特殊时间戳方法整理

索引直达

问题描述

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

解决方案

话不多说,定制软件开发稍微进行分类,贴代码。

今天时间戳与日期

时间戳

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

 $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'; $overDate=date('Y-m-d').' 00:00:00';
  • 1
  • 2
  • 3

昨天时间戳与日期

时间戳

 $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); $overDate =date("Y-m-d H:i:s",$overTime);
  • 1
  • 2
  • 3

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

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

但是在月初时会出现日期为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'));
  • 1
  • 2
  • 3
  • 4

方法二:

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

日期格式

使用日期格式函数转换时间戳,也可以用上面的方法进行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')));
  • 1
  • 2
  • 3
  • 4

本月时间戳和日期

时间戳

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

日期格式

使用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'))); 
  • 1
  • 2
  • 3
  • 4

本季度时间戳和日期

时间戳

 //获取当前季度$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'));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

日期格式

把上面的时间戳转换为日期格式

date("Y-m-d",$startTime)date("Y-m-d",$overTime)
  • 1
  • 2

当前年时间戳和日期

时间戳

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

日期格式

//本年开始  $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"));  
  • 1
  • 2
  • 3
  • 4

strtotime函数获取描述对应时间

明天当前时间

strtotime("+1 day")//时间戳date("Y-m-d H:i:s",strtotime("+1 day"))//日期格式
  • 1
  • 2
  • 3

明天当前时间

strtotime("+1 day")//时间戳date("Y-m-d H:i:s",strtotime("+1 day"))//日期格式
  • 1
  • 2
  • 3

昨天当前时间

strtotime("-1 day")//时间戳date("Y-m-d H:i:s",strtotime("-1 day"))//日期格式
  • 1
  • 2
  • 3
  • 4
  • 5

下个星期当前时间

strtotime("+1 week")//时间戳date("Y-m-d H:i:s",strtotime("+1 week"))//日期格式
  • 1
  • 2
  • 3

上个星期当前时间

strtotime("-1 week")//时间戳date("Y-m-d H:i:s",strtotime("-1 week"))//日期格式
  • 1
  • 2
  • 3

下星期几当前时间

strtotime("next Thursday")//时间戳date("Y-m-d H:i:s",strtotime("next Thursday"))//日期格式
  • 1
  • 2
  • 3

上星期几当前时间

strtotime("last Thursday")//时间戳date("Y-m-d H:i:s",strtotime("last Thursday"))//日期格式
  • 1
  • 2
  • 3

时间戳转日期格式

$timestamp =1664170375;//当前时间戳date("Y-m-d H:i:s",$timestamp);//转换为日期格式
  • 1
  • 2

日期格式转时间戳

$time = '2022-09-26 23:31:59';//时间格式参数strtotime($time)//转换为时间戳
  • 1
  • 2

获取特定时间戳函数

/**特定时间戳函数 * @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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

写在最后

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发