购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

7.3 常用时间处理方法

在PHP编程中经常需要对时间进行处理,在不同的情况下,为了方便阅读会显示不同的时间格式,或者计算两个日期节点之间的时间差等。

7.3.1 格式化时间显示

可以使用date()函数对获取的时间进行格式化处理,语法如下:


     string date ( string $format [, int $timestamp ] )

该函数返回将整数timestamp按照给定的格式字符串而产生的字符串,如果没有给出时间戳就使用本地时间。格式化字符串中可以识别的format参数如表7-2所示。

表7-2 date()函数可识别的format参数

下面用一个例子演示date()函数以不同的时间格式输出当前时间:


     <?
     // 设定要用的时区
     date_default_timezone_set('PRC');
     // 输出类似Monday
     echo date("l");
     echo "<br/>";
     // 输出类似Monday 15th of August 2005 03:12:46 PM
     echo date('l dS \of F Y h:i:s A');
     echo "<br/>";
     // 输出July 1, 2000 is on a Saturday
     echo "July 1, 2000 is on a " . date("l");
     echo "<br/>";
     /* 在格式参数中使用常量 */
     // 输出类似Wed, 25 Sep 2013 15:28:57 -0700
     echo date(DATE_RFC2822);
     echo "<br/>";
     // 输出类似2000-07-01T00:00:00+00:00
     echo date(DATE_ATOM);
     echo "<br/>";
     //输出类似2000-07-01 14:00:00
     echo date('Y-m-d H:i:s');
     ?>

执行以上程序的输出结果如下:


     Sunday
     Sunday 10th of July 2016 03:46:01 PM
     July 1, 2000 is on a Sunday
     Sun, 10 Jul 2016 15:46:01 +0800
     2016-07-10T15:46:01+08:00
     2016-07-10 15:46:01

7.3.2 计算两个日期间的时间差

假如想知道用户最后登录网站距离现在已经过去了多长时间,这时就要计算两个日期间相差多长时间。

计算日期时间差需要先把两个日期转换成纪元时间戳再计算。示例如下:


     <?php
     //2016年1月1日19点30分0秒
     $start = mktime(19,30,0,1,1,2016);
     //2016年7月7日7点30分0秒
     $end = mktime(7,30,0,7,7,2016);
     $diff_seconds = $end - $start;
     //一周的秒数是 24*60*60=604800 秒
     $diff_weeks = floor($diff_seconds/604800);
     //一天的描述是 24*60*60=86400
     $diff_days = floor($diff_seconds/86400);
     $diff_hours = floor($diff_seconds/3600);
     $diff_minutes = floor($diff_seconds/60);
     echo "2016年1月1日19点30分0秒和2016年7月7日7点30分0秒之间相差 $diff_seconds 秒,$diff_weeks 个星期,$diff_days 天,$diff_hours 个小时,$diff_minutes 分钟";
     ?>

执行以上程序的输出结果为:


     2016年1月1日19点30分0秒和2016年7月7日7点30分0秒之间相差 16200000 秒,26 个星期,187 天,4500 个小时,270000 分钟

7.3.3 从字符串中解析日期时间

在PHP中还经常使用到strtotime()函数。这个函数可将任何英文文本的日期时间描述解析为UNIX时间戳,语法如下:


     int strtotime ( string $time [, int $now = time() ] )

说明:该函数执行成功,则返回时间戳,否则返回false。

strtotime()函数的使用示例如下:


     <?php
     echo strtotime("now"), "\n";
     echo strtotime("10 September 2000"), "\n";
     echo strtotime("+1 day"), "\n";
     echo strtotime("+1 week"), "\n";
     echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
     echo strtotime("next Thursday"), "\n";
     echo strtotime("last Monday"), "\n";
     ?>

执行以上程序打印出来的结果类似:


     1468137722 1473465600 1468224122 1468742522 1468929724 1468454400 1467590400

7.3.4 日期的加减运算

有时我们需要在一个日期上加减一定的时间间隔。可以使用strtotime()来计算一些日期时间间隔。示例如下:


     <?php
     $start = 'last Monday';
     $interval = strtotime("$start + 4 days");
     echo "现在\$interval 表示上周的" . date('l',$interval);
     ?>

执行以上程序的输出结果为:现在$interval表示上周的Friday。

如果日期使用时间戳表示,并且时间间隔也可用秒来表示,就可以从时间戳中减去时间间隔。示例如下;


     <?php
     $start = time();
     echo date('Y-m-d',$start);
     $interval = 7 * 24 * 3600; // 一周
     $end = $start - $interval;
     echo date('Y-m-d',$end);
     ?>

执行以上程序的输出结果为:


     2016-07-10  2016-07-03 

前后两个日期正好相差7天。 0yPM1+JE14+Rj92raIwN1/nDFCiCwis/cWOg6mqZ08EY7j4xIk64d55vqegU92Ou

点击中间区域
呼出菜单
上一章
目录
下一章
×