PHP时间函数详解

来源:互联网 发布:派对屋调音软件 编辑:程序博客网 时间:2024/05/22 18:55
<?php 
/**
2016年10月6日23:46:25

关于 时间戳 和 时间函数 的一个小小的总结
时间这个很是多而且复杂,看的头花,只能先学最基本的然后再深入吧

**/


//检查日期是否合法
checkdate(month, day, year)


// 时间戳函数
time(); //返回当前时间戳

microtime();    //返回当前 Unix 时间戳和微秒数  //0.83551900 1475761942
   //可以用来计算代码的运行时间,  结尾时间 - 开始时间
function microtime_float(){
   list($usec, $sec) = explode(" ", microtime()); 
   return ((float)$usec + (float)$sec);  //把时间戳和微秒加起来
}
$start = microtime_float();


mktime(); //返回任意一个日期的时间戳
//mktime(时, 分, 秒, 月, 日, 年)  的格式
//3月31日 等价于 4月0日; 3月32日 会被转换成 4月1日
date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));


strtotime(time); //把任何英文的日期时间转换成时间戳(失败返回false), 当给的年份是两位的时候,0-69表示2000-2069, 70-100 表示1970-2000
strtotime("+1 week 2 days 4 hours"),返回1个星期2天4小时之后的时间戳


// 时间函数 (!!!! date() 是一个非常非常重要而且实用的函数!!!!)


idate(); // 将本地时间日期格式化成整数 //返回类型 int ,并且空格内只能接受一个参数

date(); // 格式化一个本地时间/日期成为字符串  //返回类型String
// 括号中填写日期格式,写格式要是 string 类型的
/**
date('格式',整形数字) 默认整形数字是 time(),也就是当前时间的时间戳

那么我们就可以利用 格式 和 时间戳 完美融合在 date() 函数的这个特点,
我们可以更好的交互,因为人类是看 格式的,机器是看 时间戳 的
当然 getdate() 函数也是 时间戳 转化成 数组,数组中储存 格式 的信息

date('Y-m-d H:i:s', 0); //表示最初的时间 1970-01-01 01:00:00
date('Y-m-d H:i:s', -999999);   //可以为负数 1969-12-20 11:13:21 ,但是有最大限度
date('Y-m-d H:i:s', 999999);    //可以为正数 1970-01-12 14:46:39 ,但是有最大限度

date('Y-m-d H:i:s', time()+2*3600); 表示的是两个小时之后的时间  
   
   **/
常用例子
date('Y-m-d H:i:s ');  //2016-10-06 16:19:20
date('l'); //Thursday
date('l dS \of F Y h:i:s A')    //Thursday 06th of October 2016 04:28:49 PM
//在格式字串中的字符前加上反斜线来转义可以避免它被按照上表解释。如果加上反斜线后的字符本身就是一个特殊序列,那还要转义反斜线。


//利用 mktime() 和 date() 结合可以更严谨的使用过去或者未来时间(由于夏令时的缘故,比简单的在时间戳上+ -一天的秒数更可靠)
一年后的上个月的后两天的前一个小时 = mktime(date('H')-1, 0, 0, date('m')-1, date('d')+2, date('Y')+1); 




getdate()函数  //取得日期/时间信息  //返回array()
  //默认是当前的时间,括号内的参数是时间戳
print_r(getdate()); 
/*
2016-10-06 17:06:57 星期4 第279天 Thursday October
Array
(
   [seconds] => 57
   [minutes] => 6
   [hours] => 17
   [mday] => 6
   [wday] => 4  //星期4
   [mon] => 10
   [year] => 2016
   [yday] => 279  //第279天
   [weekday] => Thursday
   [month] => October
   [0] => 1475766417  //当前时间的时间戳
)


*/


/**
利用 mktime()  date()  getdate() 
来求 两年后的上个月的前一天的晚一个小时 是星期几
mktime() 和 date() 一块求时间戳,然后用 getdate() 来返回时间
!!!!!!!!!!!!!!!!!!!!!!
还有一个更简单的方法,不使用getdate(),直接使用 date() 中可以添加函数的方法


date('Y-m-d H:i:s', mktime(date('H')-1, date('i'), date('s'), date('m')-1, date('d')-1, date('Y')+2))


**/
echo "现在时间是:".date('Y年m月d日,H时i分s秒,星期w,今天本年的第z天,当前的时间戳是:U');
$time = mktime(date('H')-1, date('i'), date('s'), date('m')-1, date('d')-1, date('Y')+2);
//$time = time() + 2*365*24*3600 - 30*24*3600 -24*3600 - 1*3600 ; //这个是利用时间戳加减法做的,显示是不精确的

echo date('Y-m-d H:i:s', $time); //--->直接可以显示以下的结果,而不使用getdate函数,省去很多麻烦

$arr = getdate($time);
echo "两年后的上个月的前一天的晚一个小时是:".$arr['year'].'年'.$arr['mon'].'月'.$arr['mday'].'日,'
.$arr['hours'].'时'.$arr['minutes'].'分'.$arr['seconds'].'秒,星期'
.$arr['wday'].',今天是本年的第'.$arr['yday'].'天,当前时间的时间戳是:'.$arr['0'];
/*
现在时间是:
2016年10月06日,17时36分12秒,星期4,今天本年的第279天,当前的时间戳是:1475768172
两年后的上个月的前一天的晚一个小时是:
2018年9月5日,16时36分12秒,星期3,今天是本年的第247天,当前时间的时间戳是:1536158172
*/


/**
常见的日期格式
年  Y: 4位数字(2001)  
y: 2位数字(01) 
L: 是否是闰年(如果是为 1)

m: 月份(06)
n: 月份(6)
M: 英文3位(Dec)
F: 英文完整(December)
t: 月份的天数(28天 - 31天)


日  d: 第几天(05)
j: 第几天(5)
D: 英文3位(Sun)
l: 英文完整(Sunday)
z: 年份中的第几天(第362天)


星期 W: 本年的第几个星期(第42个)


时间 H: 24小时,带前导0(13点  05点)
h: 12小时,带前导0(01点  05点)
G: 24小时,不带前导0(13点  5点)
g: 12小时,不带前导0


i: 分钟
s: 秒钟


A: AM/PM
a: am/pm


其他 U 时间戳
c ISO8601格式的日期  2016-10-06T18:15:27+02:00
r RFC格式的日期 Thu, 06 Oct 2016 18:17:24 +0200
0 0