php 深入理解strtotime函数(2)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:如何使用PHP计算上一个月的今天
一日,遇到一个问题,求上一个月的今天。 最开始我们使用 strtotime(-1 month) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误。 比如:2011-03-31,得到的结果是2011-03-03。我们先不追究什么问题,先看如何解决问题。 此时,想起PHP中有一个mktime函数


strtotime(”-1 month”)求值失败的原因
虽然strtotime(”-1 month”)这种方法对于后一个月比前一个月的天数的情况会求值失败,但是从其本质上来说,这并没有错。 PHP这样实现也无可厚非。只是我们的需求决定了我们不能使用这种方法,因此我们称其为求值失败。
我们来看它的实现过程,由于没有第二个参数,所以程序使用默认的当前时间。 第一个参数传入的是-1 month字符串,这个字符串所对应的re文件中的正则为:

 代码如下:
reltextunit = (('sec'|'second'|'min'|'minute'|'hour'|'day'|'fortnight'|'forthnight'|'month'|'year') 's'?) | 'weeks' | daytext;
relnumber = ([+-]*[ /t]*[0-9]+);
relative = relnumber space? (reltextunit | 'week' );


最终relative会对应一系列操作,程序会识别出前面的-1 和后面的month字符串,month对应一种操作类型:TIMELIB_MONTH 。 在此之后,根据识别出来的数字和操作类型执行操作,如下代码:

 代码如下:
case TIMELIB_MONTH: s->time->relative.m += amount * relunit->multiplier; break;


如上代码,则是直接记录月份的相对值减一。 但是对于类似于3月31号这样的情况,2月没有31号,程序会自动将日期计算到下一个月。

分享:php二分法查找数组是否包含某一元素
二分法查找数组是否包含某一元素,兼容正反序,代码实现: 代码如下: ?php $searchValue = (int)$_GET['key']; function search(array $array, $value) { $max = count($array)-1; $min = 0; $isAscSort = $array[$min] $array[$max]; while (TRUE) { $sum = $min+$max

共2页上一页12下一页
来源:模板无忧//所属分类:PHP教程/更新时间:2013-05-23
相关PHP教程