·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> 谨慎使用php的strtotime()函数

谨慎使用php的strtotime()函数

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
谨慎使用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 }

  • 上一篇文章:
  • 下一篇文章: