首页 > 编程 > PHP > 正文

谨慎使用php的strtotime()函数

2019-11-15 01:43:19
字体:
来源:转载
供稿:网友
谨慎使用php的strtotime()函数

  我们在日常业务中,针对业务量,经常会采用对数据库按时间做横向分表,分表后的查询往往会涉及到时间问题。例如,我们想查询某个用户距离当前时间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)10         return $timeArr;11 12     do 13     {14         $timeArr[] = date("Ym", strtotime("-$mthNum month"));15         $mthNum --;16     }17     while ($mthNum > 0);18 19     return $timeArr;20 }

  

  表面看代码似乎没有问题,但是我们做个测试,下面是测试代码,测试的目的很简单,只是想测试一下,每个月最后一天的前一个月的日期是多少

 1 <?php 2 $dateArr = array( 3     "2014-01-31    00:00:00 -1 month", 4     "2014-02-28    00:00:00 -1 month", 5     "2014-03-31    00:00:00 -1 month", 6     "2014-04-30    00:00:00 -1 month", 7     "2014-05-31    00:00:00 -1 month", 8     "2014-06-30    00:00:00 -1 month", 9     "2014-07-31    00:00:00 -1 month",10     "2014-08-31    00:00:00 -1 month",11     "2014-09-30    00:00:00 -1 month",12     "2014-10-31    00:00:00 -1 month",13     "2014-11-30    00:00:00 -1 month",14     "2014-12-31    00:00:00 -1 month",15 );16 17 foreach ($dateArr as $val)18 {19     $time = strtotime($val);20     echo [$time][$val]."/r/n";21 }  

  我们看一下测试结果,从测试结果中,我们发现我们忽略了每个月天数不同,那么strtotime()会带来不一样的结果

  那么究竟 strtotime("-$n month") 是怎么计算的呢?在做一个测试,如下:查看一下结果

 1 <?php 2  3 $testTime = date("Y-m-d H:i:s", time()); 4 echo "测试时间:{$testTime}  /r/n"; 5  6 $flag = 0;  7 $time = 0; 8 $tmp  = 0; 9 10 while(1)11 {12     if($flag ++ > 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 }

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表