Listening to the Words

php时间戳处理

《php时间戳处理》

百度百科里关于时间戳的概念是如下定义的:

时间戳:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

由于北京时间比格林威治时间快了八个小时,因此北京时间的时间戳比标准时间戳快了(3600*8)秒,但是实际上时间戳是唯一的.任何时区任何地点获得到的时间戳都是唯一的,当我们在PHP中设置了时区后(比如:ate_default_timezone_set(‘PRC)),此时获得的时间戳就是服务器自动为标准时间戳+8小时后的结果.

因此,在开发中涉及到时间转换时,一定要统一时间戳的时区,有的时间戳取出的是UTC(世界协调时间)—同(GMT:格林威治时间),有的是北京时间,这样计算起来就会相差8个小时,导致结果总是对不上.

mktime函数是用来自定时间戳的,总共传递7个参数()第7个参数已经被废止了)
mktime(hour,minute,second,month,day,year,is_dst);
date('Y-m-d H:i:s',mktime(23,59,59,11,0,2017));
//2017年11月的上一天时间戳(关键点在0),如果是前两天的就是-1

以下是一些常用的时间戳的转换:

//上月开始时间
$lastMonthBeginTime = mktime(0, 0 , 0,date("m")-1,1,date("Y"));
//上月结束时间
$lastMonthEndTime=mktime(23,59,59,date("m") ,0,date("Y"));
//本月开始时间
$thisMonthBeginTime=mktime(0, 0 , 0,date("m"),1,date("Y"));
//本月结束时间
$thisMonthEndTime=mktime(23,59,59,date("m"),date("t"),date("Y"));
//本周开始时间
$thisWeekBegin=mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y"));
//本周结束时间
$thisWeekEnd=mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y"));
//上周开始时间
$lastWeekBegin=mktime(0, 0 , 0,date("m"),date("d")-date("w")+1-7,date("Y"));
//上周结束时间
$lastWeekEnd=mktime(23,59,59,date("m"),date("d")-date("w")+7-7,date("Y"));
//本季度未最后一月天数
$thisSeasonDays=date("t",mktime(0, 0 , 0,date('n')+(date('n')-1)%3,1,date("Y")));
//本季度开始
 $thisSeasonBegin=mktime(0, 0, 0,date('n')-(date('n')-1)%3,1,date('Y'));
 //本季度结束
$thisSeasonEnd=mktime(23,59,59,date('n')+(date('n')-1)%3,$thisSeasonDays,date('Y'));

同时还有一个更简单的写法:使用PHP内置的时间函数strtotime();

strtotime("now"); //当前时间
strtotime("-1 week Monday");//上周一开始时间
strtotime("-1 week Sunday");//上周日开始时间
strtotime("+0 week Monday");//本周一开始时间
strtotime("+0 week Sunday");//本周日开始时间

strtotime()函数非常强大,具体的用法可参看官方手册http://php.net/manual/zh/function.strtotime.php

点赞