【PHP】:如何计算时间,神奇的strtotime函数

我现在研发的系统中,有很多报表是需要按月统计的,比如月底销售奖励,比如环比增长,都要用到本月、上月,指定月,指定月的上个月这种概念,为了便于存储、查询、计算、比较的方便,我们采用了整型201203这种格式来保存月份,然后就衍生了一系列时间计算的需求。

假如时间格式是201203这种,如何算出201202?最简单的办法莫过于-1,因为月份是连续的,所以-1和+1就能计算上月和下月,但是你很快会发现,只有2月到11月之间适合这么算,跨年就麻烦了。于是,我就看到了各种时间计算的方法,比如把201203先拆开,变成2012和03,然后对3判定,决定是否进位退位,做得像12进制加减法一样,这是最常见的用法,然后为此封装一个函数。这种算法还有个麻烦,就是做加减法,要转换整数,换完以后,小于10的,要拼回去,就要加前置0。

有人这么写:

1
2
3
4
5
6
7

= 10,不仔细就错了
$yearmonth = $year . $month > 10 ? $month : '0' . $month;

//题外话:对于n位数拼接前缀0的问题,我建议这么做,以下是2位数的例子
$yearmonth = $year . substr('00' . $month, -2);

经过反复地实现类似需求,经过不断地总结和尝试,我这里给出一组比较简洁的写法,供诸君参考,如果有更好,更安全的写法,请诸君不吝赐教,谢谢:

1
2
3
4
5

= 1338480000 AND TIMESTAMP < 1341072000"
var_dump("TIMESTAMP >= {$start} AND TIMESTAMP < {$end}");