PHP-日期与时间
1.UNIX时间戳
在日常生活中我们通常有很多方式表示日期-时间:
2018/1/22 7:09 PM
2018-1-22 19:09
1/22/2018 7:09
2018年1月22日 下午7:09 等等
能用这些字符串表示时间是因为我们很容易能从字符串的格式中识别出正确的时间。
但是对于计算机来说这就不是那么容易了,首先表示时间的格式远远不止上面列出的几种。其次用字符串表示时间计算起来也很困难。
在计算机中,用一种叫做UNIX时间戳的东西存储时间。
UNIX时间戳是一个32位的无符号整数,计算机用这个它来表示从1970年1月1日0点到当前时间的秒数。
不用担心,时间戳足够表示一百三十多年的时间,也就是说在2100年以前我们都不用但是时间戳不够用。
获取时间戳
1 <?php 2 echo time()."\n";//返回当前时间戳 3 4 /*mktime()获取特定时间的时间戳*/ 5 echo mktime()."\n";//如果不传参数,则返回当前时间戳,和time()一样 6 echo mktime(19,26,0,1,22,2018)."\n";//返回2018年1月22日19点26分0秒的时间戳 7 ?>
注:这里返回的时间戳是国际标准时间,如果你在地球上的其他时区,需要做一定的设置才能获取本地时间戳。可以参考时区设置。
2.格式化时间戳
计算机内部以时间戳表示时间,但是这个时间戳计算机认识,但是对于人来说是很难理解的,那么我们怎么吧时间戳转变成人类理解的格式呢。
1 <?php 2 /*getdate()函数将传入的时间戳的信息以数组形式返回,如果没有传参,那么默认为当前时间戳*/ 3 print_r(getdate()); 4 // Array ( [seconds] => 12 [minutes] => 39 [hours] => 12 [mday] => 22 [wday] => 1 [mon] => 1 [year] => 2018 [yday] => 21 [weekday] => Monday [month] => January [0] => 1516621152 ) 5 // 可以看到时间戳表示的时间为2018/1/22 12:39:12(标准时间),我的本地时间为2018/1/22 19:39:12我在东8区 6 ?>
出此之外还有一个更高级的函数
1 <?php 2 /*date()函数将一个时间戳转按指定格式转换为字符串并返回*/ 3 /*第二个参数没有传时间戳则默认当前时间*/ 4 echo date("Y/m/d h:i:s A");//2018/01/22 12:49:14 PM 5 echo date("Y年m月d日 H-i-s");//2018年01月22日 12-50-55 6 ?>
更多格式参考这里
3.更精确的时间戳
UNIX时间戳是以秒为单位的,如果希望表示精度更高的时间(比如一个脚本的运行时间)这显然是不行的。
1 <?php 2 /*microtime()返回当前的时间戳+微妙数*/ 3 echo microtime();//0.38153800 1516622297 4 //默认格式是微妙+时间戳 5 6 echo microtime(true);//1516622373.1429 7 ?>
4.修改默认时区
使用这些函数返回的都是标准时间,如果希望返回本地时间需要修改时区。比如我在东8区。
可以在配置文件php.ini中修改date.timezone=Asia/Shang
或者使用date_default_timezone_set('PRC')函数。