在PHP中,大多数的时间格式都是以UNIX时间戳表示的,而UNIX时间戳是以s(秒)为最小的计量时间的单位。这对某些应用程序来说不够精确,所以可以调用microtime()返回当前UNIX时间戳和微妙数。该函数的原型如下:
mixed microtime([bool get_as_float]); //返回当前UNIX时间戳和微妙数
可以为该函数提供一个可选的布尔型参数,如果在调用时不提供这个参数,本函数以“msec sec”的格式返回一个字符串。其中sec是自UNIX纪元到现在的秒数,而msec是微妙部分,字符串的两部分都是以秒为单位返回的。如果给出了get_as_float参数并且其值等价于TRUE,microtime()将返回一个浮点数。在小数点前面还是以时间戳格式表示,而小数点后面则表示微妙的值。但要注意参数get_as_float是在PHP5.0版本中新加的,所以在PHP5以前的版本中,不能直接使用该参数直接请求一个浮点数。在下面的例子中通过两次调用microtime()函数,计算运行PHP脚本所需要的时间。代码如下所示:
代码如下 | 复制代码 |
<?php //生命一个计算脚本运行时间的类 class Timer{ private $startTime = 0; //保存脚本开始执行时的时间(以微秒的形式保存) private $stopTime = 0; //保存脚本结束执行时的时间(以微秒的形式保存) //在脚本开始处调用获取脚本开始时间的微秒值 function start(){ $this->startTime = microtime(true); //将获取的时间赋值给成员属性$startTime } //脚本结束处嗲用脚本结束的时间微秒值 function stop(){ $this->stopTime = microtime(true); //将获取的时间赋给成员属性$stopTime } //返回同一脚本中两次获取时间的差值 function spent(){ //计算后4舍5入保留4位返回 return round(($this->stopTime-$this->startTime),4); } } $timer= new Timer(); $timer->start(); //在脚本文件开始执行时调用这个方法 usleep(1000); //脚本的主题内容,这里可以休眠一毫秒为例 $timer->stop(); //在脚本文件结束处调用这个方法 echo "执行该脚本用时<b>".$timer->spent()."</b>"; ?> |
在以上脚本中,声明一个用于计算脚本执行时间的类Timer。需要在脚本执行开始的位置调用该类中的start()方法,获取脚本开始执行时的时间。并在脚本执行结束的位置调用该类中的stop()方法,获取脚本运行结束时的时间。再通过访问该类中的spent()方法,就可以获取运行脚本所需的时间。
后面我又打到一个类,下面我们一起来看看吧
代码如下 | 复制代码 |
** * 获取某段程序运行所用的时间 * */ class runtime { var $StartTime = 0; var $StopTime = 0; /** * 获取系统时间 * * @return unknown */ function get_microtime() { list($usec, $sec) = explode(‘ ’, microtime()); //取系统时间 前半部分是时间戳,后半部分是微妙部分 return ((float)$usec + (float)$sec); } /** * 取程序开始时候的系统时间 * */ function start() { $this->StartTime = $this->get_microtime(); //程序开始的时候用这个方法取一次时间 } /** * 取程序结束时候的系统时间 * */ function stop() { $this->StopTime = $this->get_microtime(); //程序结束的时候用这个方法取一次时间 } /** * 计算出程序运行所用时间 * * @return unknown */ function spent() { // return round(($this->StopTime - $this->StartTime) * 1000, 1); return round(($this->StopTime - $this->StartTime), 4); //用结束时候的时间减去开始时候的时间,就是程序运行的时间了 } } |
每个地区都有自己的本地时间,在网上及无线电通信中,时间的转换问题显得格外突出。整个地球分为24个时区,每个时区都有自己的本地时间。在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,成为通用协调时(Universal Time Coordinated,UTC),是由世界标准设定的全球标准时间。UTC原先也被成为格林威治标准时间(Greenwich Mean Time,GMT),都与英国伦敦的本地时间相同。
PHP默认的时区设置是UTC时间,而北京正好位于时区的东八区,领先UTC8个小时。所以在使用PHP中time()等获取当前时间的函数,得到的时间总是不对,表现是和北京时间相差8个小时。如果希望正确显示北京时间,就需要修改默认的时区设置,可以通过以下两种方式完成。
①如果使用的是独立的服务器,有权限修改配置文件,设置时区就可以通过修改php.ini中的date.timezone属性完成。我们可以将这个属性的值设置为“Asia/Shang”、“Asia/Chongqing”、“Etc/GMT-8”或PRC等中的一个,再在PHP脚本中获取的当前时间就是北京时间。修改PHP的配置文件如下所示:
date.timezone = Etc/GMT-8 //在配置文件中设置默认时区为东8区(北京时间)
②如果使用的是共享服务器,没有权限修改配置文件php.ini,并且PHP版本又在5.1.0以上,也可以在输出时间之前调用date_dafault_timezone_set()函数设置时区。该函数需要提供一个时区标识符作为参数,和配置文件中date.timezone属性的值相同。该函数的使用如下所示:
date_default_timezone_set(‘PRC’); //输出时间之前设置的时区,PRC为中华人民共和国
echo date(‘Y-m-d H:i:s’,time()); //输出的当前时间为北京时间
3.使用php函数
如果你使用北京时间,就像这样就可以了。date_default_timezone_set("Asia/Shanghai");
例子,WAMP的默认时区
WAMP默认的时区是格林威治标准时间(GMT),这就意味着WAMP默认的服务器时区是GMT,但我们可以更改服务器默认时区,以对应北京时间。打开WAMP菜单中的php.ini,在文档最后添加如下代码即可:
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Asia/Shanghai"
功能需求
文章发布时段操作,要是在白天时间就可以发布,晚上则阻止。我们假设白天时间段从早上七点(七点估计好多人都没睡醒)到下午六点,那么我们可以这么下
代码如下 | 复制代码 |
/** |
补充:日期加减方法
如:2012-04-25 10:10:00
我要在这个日期时间的基础上加上5个月并返回处理后的日期
结果:2012-04-25 10:10:00 加5个月等于 2012-09-25 10:10:00
结合PHP函数date()与strtotime()两个函数来实现大致也是这个意思,请看实例代码
代码如下 | 复制代码 |
<?php |
上面的例子虽然说不上与文章第一个例子有什么关系,但我觉得日期比较与日期加减是可联系的。
对于重复数据我们多半会放到数据或数据库中然后进行删除或排除重复数据,下面我们来看一个简单的给数组去除重复数据的函数,有兴趣的朋友可进入参考。代码如下 | 复制代码 |
/** * 给数组排重 * 与array_unique函数的区别:它要求val是字符串,而这个可以是数组/对象 * * @param unknown_type $arr 要排重的数组 * @param unknown_type $reserveKey 是否保留原来的Key * @return unknown */ static function m_ArrayUnique($arr, $reserveKey = false) { if (is_array($arr) && !empty($arr)) { foreach ($arr as $key => $value) { $tmpArr[$key] = serialize($value) . ''; } $tmpArr = array_unique($tmpArr); $arr = array(); foreach ($tmpArr as $key => $value) { if ($reserveKey) { $arr[$key] = unserialize($value); } else { $arr[] = unserialize($value); } } } return $arr; } |
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排:
代码如下 | 复制代码 |
<?php 结果是: Array ( [0] => a [2] => c [3] => d ) |
那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是array_splice():
代码如下 | 复制代码 |
<?php 结果是: Array ( [0] => a [1] => c [2] => d ) |
删除数组中特定元素
代码如下 | 复制代码 |
<?php |
补充删除空数组
实例:
代码如下 | 复制代码 |
<?php Array ( 总结 |
array_splice()函数删除的话,数组的索引值也变化了。
unset()函数删除的话,数组的索引值没有变化。