我們在日常業務中,針對業務量,經常會採用對資料庫按時間做橫向分表,分表後的查詢往往會涉及到時間問題。例如,我們想查詢某個使用者距離當前時間1個月的訂單情況,在這個時候,我們有些會用到strtotime()函式去處理。
但是使用strtotime(),需要非常謹慎。我們先看一段**,**目的是想拿到幾個月以前的年份月份,例如今天是2023年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 17 while ($mthnum > 0);
18 19 return $timearr;
20 }
1 <?php我們看一下測試結果,從測試結果中,我們發現我們忽略了每個月天數不同,那麼strtotime()會帶來不一樣的結果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
那麼究竟 strtotime("-$n month") 是怎麼計算的呢?在做乙個測試,如下:檢視一下結果
1 <?php2 3 $testtime = date("y-m-d h:i:s", time());
5 6 $flag = 0;
7 $time = 0;
8 $tmp = 0;
9 10 while(1)
11 月前: , 日期: 差值:天 \r\n";
通過這個我們發現原來strtotime("-$n month")是這樣計算的 (注: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 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 函式
我們在日常業務中,針對業務量,經常會採用對資料庫按時間做橫向分表,分表後的查詢往往會涉及到時間問題。例如,我們想查詢某個使用者距離當前時間1個月的訂單情況,在這個時候,我們有些會用到strtotime 函式去處理。但是使用strtotime 需要非常謹慎。我們先看一段 目的是想拿到幾個月以前的年份月...
PHP的時間函式strtotime
時間加減 php view plain copy 獲取本地提取年份 1 date date y m d mktime 0,0,0,date m date d date y 1 如果要獲取資料庫中的時間應該如何處理呢?在php文件中找到了乙個很好的函式strtotime,可以對時間進行加減 php v...
PHP時間戳strtotime 的使用方法
在php中我想要獲取時間戳有多種方法,最常用的就是使用time函式與strtotime 函式把日期轉換成時間戳了,下面我來給大家分享一下時間戳函式 strtotime用法。獲取指定的年月日轉化為時間戳 php時間戳函式獲取指定日期的unix時間戳 strtotime 2012 12 7 示例如下 如...