实例说明
在一些程序中经常需要将两个时间进行比较,但是由于时间是由年、月、日、时、分、秒组成的,比较起来很不方便,这时可以把时间转换成时间戳来进行比较。本实 例通过date()函数、strtotime()函数和ceil()函数实现比较两个时间戳的大小,运行结果如图1.6所示。
图1.6 比较两个时间戳的大小 |
实现过程
具体步骤如下:
(1)创建PHP脚本文件。首先对PHP语言中的时区进行设置,将时区更改为中国上海时区。然后通过strtotime()函数获取当前时间的UNIX时间戳,并与指定的时间戳进行算术运算。最后,将时间戳运算结果转换为天数,通过ceil()函数进行取整运算并输出结果。其代码如下:
1. <?php
2. date_default_timezone_set("Asia/ShangHai"); //将格林威治时间设置为本地时间
3. $a = strtotime("now"); //取得当前时间戳
4. $b = strtotime("05 May 2011"); //取得2011年5月5号的时间戳
5. echo $a."\n";
6. echo "输出日期".date("Y-m-d H:i:s",$a)."<br><br>"; //取得以$a为时间点的时间
7. echo $b."\n";
8. echo "输出日期".date("Y-m-d H:i:s",$b)."<br><br>"; //取得以$b为时间点的时间
9. $c = ceil(($a - $b)/(3600*24)); //计算相差天数
10. echo "距2011年5月5号已过去".$c."天";
11. ?>
(2)将该文件存储于\MR\01\006文件夹下,并命名为index.php。运行结果如图1.6所示。
多学两招:
有效的时间戳通常从Fri, 13 Dec 1901 20:45:54 GMT 到 Tue, 19 Jan 2038 03:14:07 GMT(对应于32位有符号整数的最小值和最大值)。不是所有的平台都支持负的时间戳,那么日记范围就被限制为不能早于UNIX纪元。这意味着在1970年1月1日之前的日期将不能用在Windows、某些Linux版本以及几个其他的操作系统中。
技术要点
本实例主要是通过strtotime()函数将时间转换为UNIX时间戳,并进行相关取整运算而实现的。其中涉及相关函数语法如下。
(1)strtotime()函数:本函数预期接受一个包含英文日期格式的字符串并尝试将其解析为UNIX时间戳。
- int strtotime( string time [, int now]);
该函数有两个参数。如果参数time的格式是绝对时间,则now参数不起作用;如果参数time的格式是相对时间,其对应的时间就是参数now来提供的,当没有提供参数now时,对应的时间就为当前时间。如果解析失败,则返回false。在PHP5.1.0之前的版本中,本函数在失败时返回-1。
(2)ceil()函数:返回不小于value的下一个整数。
- float ceil ( float value);
脚下留神:
在UNIX系统中,日期与时间表示为自1970年1月1日零点起到当前时刻的秒数,这种时间称为UNIX时间戳,以32位二进制表示。其中,1970年1月1日零点称为UNIX世纪元。UNIX时间戳提供了一种统一、简洁的时间表示方式,在不同的操作系统中均支持这种时间表示方式,同一时间在UNIX和Windows中均以相同的UNIX时间戳表示,所以不需要在不同的系统中进行转换。同时,UNIX时间戳是一个时间差,与时区没有关系,无论当前PHP中使用的是何种时区,其UNIX时间戳都是唯一的。