最新消息:网站改版咯

php的strtotime函数

php Yovae 1367浏览

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

有人这么写:


<?php
//注意:这里应该是$month >= 10,不仔细就错了
$yearmonth = $year . $month > 10 ? $month : '0' . $month; 
 
//题外话:对于n位数拼接前缀0的问题,我建议这么做,以下是2位数的例子
$yearmonth = $year . substr('00' . $month, -2);
经过反复地实现类似需求,经过不断地总结和尝试,我这里给出一组比较简洁的写法,供诸君参考,如果有更好,更安全的写法,请诸君不吝赐教,谢谢:

<?php
//计算本月的
$month = intval(date('Ym'));
var_dump($month); //int(201206)
 
//根据月份计算1号0点0分时间戳
$month = 201206;
$time = strtotime($month . '01');
var_dump($time); //int(1338480000)
 
//根据月份计算上月
$month = 201206;
$lastmonth = date('Ym', strtotime($month . '01 -1 month'));
var_dump($lastmonth); //string(6) "201205"
 
//根据月份计算该月时间戳起止
$month = 201206;
$start = strtotime($month . '01');
$end = strtotime($month . '01 +1 month');
//左闭右开区间[start,end)
//string(50) "TIMESTAMP >= 1338480000 AND TIMESTAMP < 1341072000"
var_dump("TIMESTAMP >= {$start} AND TIMESTAMP < {$end}");

转载请注明:Yovae Studio » php的strtotime函数