7.2 处理UNIX时间戳
7.1节介绍函数date()时,提到过其第2个参数是一个UNIX时间戳。大多数UNIX系统用一个32-bit的整数存储当前时间和日期,这个整数是从1970年1月1日零时(按GMT)开始的秒数,这个秒数即称为UNIX时间戳。
如果希望将一个日期和时间转换成一个UNIX时间戳,可以使用PHP提供的函数mktime()来完成。该函数的语法如下。
int mktime(int $hour, int $minute, int $second, int $month, int day, int $year);
函数mktime()根据所给参数返回UNIX时间戳,如果参数非法,函数返回FALSE。函数mktime()的第1个参数是小时数,第2个参数是分钟数,第3个参数是秒数(范围是0-59),第4个参数是月份,第5个参数是天数,第6个参数是年份。年份可以是两位或四位数字,如果是两位数字,0—69对应于2000—2069,70—99对应于1970—1999。该函数的参数从右向左可以省略,省略的参数将以本地日期和时间代替。例如如下代码,即返回当前日期和时间的UNIX时间戳。
$cur_timestamp = mktime();
又如如下代码,即返回当前年份1月1号的UNIX时间戳。
mktime(0,0,0,1,1);
函数mktime()也可以做简单的日期计算,如下代码就是一个例子,这段代码表示使用函数mktime()计算30天后同一时间的时间戳。
mktime(0,0,0,$month,$day+30,$year);
读者可以通过代码7-2进一步认识PHP中对UNIX时间戳的处理。
代码7-2处 理UNIX时间戳7-2.php
01 <?php 02 echo " 时间戳".mktime(0,0,0,12,31,2008)." 对应的日期是:"; // 换算时间戳 03 echo "<br/>"; 04 05 echo date("M-d-Y", mktime(0,0,0,12,31,2008)); // 按指定格式输出日期 06 echo "<hr>"; 07 echo "<br/>"; 08 09 $day = 1; 10 echo " 时间戳".mktime(0,0,0,7,$day+38,2012)." 对应的日期是:<br/>";// 日期计算后的时间戳 11 echo date("Y-m-d", mktime(0,0,0,7,$day+38,2012)); 12 echo "<hr>"; 13 ?>
【代码解析】这段程序的执行结果如图7-2所示。从图中可以看出,时间戳不太容易被人理解,但是转换成对应的日期后,读者就能轻松识别当前时间了。
图7-2 处理UNIX时间戳
PHP的函数time()专门用于返回当前日期和时间的UNIX时间戳,不需要传入任何参数,该函数用法比较简单,这里不作赘述。