使用php的strtotime 函式

2021-09-11 14:21:10 字數 2511 閱讀 2129

我們在日常業務中,針對業務量,經常會採用對資料庫按時間做橫向分表,分表後的查詢往往會涉及到時間問題。例如,我們想查詢某個使用者距離當前時間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 

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()會帶來不一樣的結果

那麼究竟 strtotime("-$n month") 是怎麼計算的呢?在做乙個測試,如下:檢視一下結果

1 <?php 

2 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 示例如下 如...