您好,欢迎访问一九零五行业门户网

谨慎使用php的strtotime()函数,phpstrtotime函数_PHP教程

谨慎使用php的strtotime()函数,phpstrtotime函数我们在日常业务中,针对业务量,经常会采用对数据库按时间做横向分表,分表后的查询往往会涉及到时间问题。例如,我们想查询某个用户距离当前时间1个月的订单情况,在这个时候,我们有些会用到strtotime()函数去处理。
但是使用strtotime(),需要非常谨慎。我们先看一段代码,代码目的是想拿到几个月以前的年份月份,例如今天是2014年8月1号,我想拿到2个月前的年份月份是 array(0=>201406, 1=>201407,)
1 /**** 2 *$mthnum 几月以前 3 * return like array('0'=>'201401','1'=>'201402'),结果不包含当前月份 4 ************/ 5 function gettimeym($mthnum) 6 { 7 $timearr = array(); 8 9 if($mthnum 0);18 19 return $timearr;20 }
表面看代码似乎没有问题,但是我们做个测试,下面是测试代码,测试的目的很简单,只是想测试一下,每个月最后一天的前一个月的日期是多少
1 我们看一下测试结果,从测试结果中,我们发现我们忽略了每个月天数不同,那么strtotime()会带来不一样的结果
那么究竟 strtotime(-$n month) 是怎么计算的呢?在做一个测试,如下:查看一下结果
1 12)13 break;14 15 $time = strtotime(-$flag month);16 $monthdiff = ($time - $tmp)/86400; //86400 = 24 * 60 * 60,17 $tmp = $time;18 19 $dispdate = date(y-m-d h:i:s, $time);20 21 echo {$flag}月前: {$time}, 日期:{$dispdate)} 差值:{$dispdate}天 \r\n;22 }
(注:strtotime(-$n month),第二个参数省略,第二个参数表示距离的时间,省略表示当前时间)
时间
差值
理论时间
结果
7月31号
1月前
6月31号
6月只有30天,则加一天到7月1号
7月31号
2月前
5月31号
7月31号
3月前
4月31号
4月只有30天,则加一天到5月1号
……
那么如果这样的话,我们怎么用strtotime(-$n month)处理我们的需求呢?
下面提供一段手写代码供参考
1 /**************** 2 *解决两个时间段之间的年月 3 * $btm, $etm 是unix时间戳 4 *****************/ 5 function gettimedis($btm, $etm) 6 { 7 $resarr = array(); 8 if($etm < $btm) 9 return $resarr;10 11 //将btm和etm都转成每月1号12 $btmc = strtotime(date(y-m-01 00:00:00, $btm));13 $etmc = strtotime(date(y-m-01 00:00:00, $etm));14 15 16 $flag = 0; //时间差标识符17 $resarr[] = date(ym, $etmc);18 19 while(1)20 {21 $flag ++;22 $comptime = strtotime(-{$flag} month, $etmc);23 24 if($comptime < $btm)25 break;26 27 $resarr[] = date(ym, $comptime);28 }29 30 return array_unique($resarr);31 }
php 中strtotime函数的问题
mktime() 需要带参数的。
想要得到两天后的最简单方法是:
好好看看 strtotime的函数说明,你还可以
+10 hours
-2 hours
等等。
php strtotime函数怎在指定的时间上变动?
$date = date(y-m-d, strtotime('2012-01-20') + 60*60*24);
http://www.bkjia.com/phpjc/855628.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/855628.htmltecharticle谨慎使用php的strtotime()函数,phpstrtotime函数 我们在日常业务中,针对业务量,经常会采用对数据库按时间做横向分表,分表后的查询往往会...
其它类似信息

推荐信息