rinald_未来往事

php获取昨天/今天/明天/上周/本月/过去N月起止时间戳

PHP
PHP获取昨天、今天、明天、上周、本月、过去几/N个月、过去半年、一年后等起始时间戳和结束时间戳的方法

首先了解两个PHP函数:
strtotime()函数:将任何英文文本的日期时间描述解析为 Unix 时间戳
strtotime(time,now)

mktime() 函数:返回一个日期的 Unix 时间戳
mktime(hour,minute,second,month,day,year,is_dst)

php获取昨天 今天 明天 上周 本月 一年后 十年后的开始时间戳和结束时间戳:
  1. //php获取今天日期  
  2. date("Y-m-d");  
  3.   
  4. //php获取昨天日期  
  5. date("Y-m-d",strtotime("-1 day"))  
  6.   
  7. //php获取明天日期  
  8. date("Y-m-d",strtotime("+1 day"))  
  9.   
  10. //php获取一周后日期  
  11. date("Y-m-d",strtotime("+1 week"))  
  12.   
  13. //php获取一周零两天四小时两秒后时间  
  14. date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds"))  
  15.   
  16. //php获取下个星期四日期  
  17. date("Y-m-d",strtotime("next Thursday"))  
  18.   
  19. //php获取上个周一日期  
  20. date("Y-m-d",strtotime("last Monday"))  
  21.   
  22. //php获取一个月前日期  
  23. date("Y-m-d",strtotime("last month"))  
  24.   
  25. //php获取一个月后日期  
  26. date("Y-m-d",strtotime("+1 month"))  
  27.   
  28. //php获取十年后日期  
  29. date("Y-m-d",strtotime("+10 year"))  
  30.   
  31. //php获取今天起止时间戳  
  32. mktime(0,0,0,date('m'),date('d'),date('Y'));  
  33. mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;  
  34.   
  35. //php获取昨天起止时间戳  
  36. mktime(0,0,0,date('m'),date('d')-1,date('Y'));  
  37. mktime(0,0,0,date('m'),date('d'),date('Y'))-1;  
  38.   
  39. //php获取上周起止时间戳  
  40. mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));  
  41. mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));  
  42.   
  43. //php获取本月起止时间戳  
  44. mktime(0,0,0,date('m'),1,date('Y'));  
  45. mktime(23,59,59,date('m'),date('t'),date('Y'));  
  46. /**By:未来往事博客 http://fity.cn**/  

php获取过去半年/N个自然月每月的起止时间戳:
  1. /** 
  2.  * 计算过去N月每个自然月的起止时间戳,包括当前月份 
  3.  * @param  integer $max      月份数,默认为6 
  4.  * @param  string  $monthstr 返回值数组的第三个下标(具体月份的表示形式) 
  5.  * @return array            每个子数组形式array(月起始时间戳,月结束时间戳,月份名称) 
  6.  * @author            来源未来往事博客:http://fity.cn 
  7.  */  
  8. function month_offset($max= 6,$monthstr = 'ym'){  
  9.     if ($max<=0) {  
  10.         return false;  
  11.     }  
  12.     $base = date('Y-m-01');  
  13.     $y = 1;  
  14.     $mo = array();  
  15.     $mo[0][0] = strtotime($base);  
  16.     $mo[0][1] = time();  
  17.     $mo[0][2] = date($monthstr);  
  18.     while ($y < $max) {  
  19.         $mo[$y][0] = strtotime(date('Y-m-01',strtotime($base.' -'.$y.' month')));  
  20.         $mo[$y][1] = $y == 1?$mo[0][0]:$mo[$y-1][0];  
  21.         $mo[$y][2] = date($monthstr,$mo[$y][0]);  
  22.         $y++;  
  23.     }  
  24.     return array_reverse($mo);  
  25. }  
  26. 默认输出结果:  
  27. array (size=6)  
  28.   0 =>   
  29.     array (size=3)  
  30.       0 => int 1464710400  
  31.       1 => int 1467302400  
  32.       2 => string '1606' (length=4)  
  33.   1 =>   
  34.     array (size=3)  
  35.       0 => int 1467302400  
  36.       1 => int 1469980800  
  37.       2 => string '1607' (length=4)  
  38.   2 =>   
  39.     array (size=3)  
  40.       0 => int 1469980800  
  41.       1 => int 1472659200  
  42.       2 => string '1608' (length=4)  
  43. …………  

php获取两个日期之间的日期:
  1. /** 
  2.  * 计算过去N月每个自然月的起止时间戳,包括当前月份 
  3.  * @param  string  $start 开始日期,例如:2016-10-10 
  4.  * @param  string  $end 结束日期 
  5.  * @return string  日期 
  6.  * @author            来源未来往事博客:http://fity.cn 
  7.  */  
  8. function getDates($start$end) {   
  9.     $dt_start = strtotime($start);  
  10.     $dt_end   = strtotime($end);  
  11.     do {   
  12.         echo date('Y-m-d'$dt_start).' 
  13. ';  
  14.     } while (($dt_start += 86400) <= $dt_end);// 重复 Timestamp + 1 天(86400), 直至大于结束日期中止  
  15. }  
  16. getDates('2016-10-10','2016-12-09');  
  17. 默认输出结果:  
  18. 2016-10-10  
  19. 2016-10-11  
  20. 2016-10-12  
  21. 2016-10-13  
  22. 2016-10-14  
  23. 2016-10-15  
  24. …………  
原文作者:rinald
原文地址:http://fity.cn/post/515.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

已有1位网友发表了看法:

1L买木耳 2015-04-20 15:22:07 回复
技术大牛

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。