1. 程式人生 > >PHP 查詢指定日期區間的記錄(沒有記錄的日期補全辦法)、近.30天查詢

PHP 查詢指定日期區間的記錄(沒有記錄的日期補全辦法)、近.30天查詢

1、先根據活動是否結束判斷日期區間,如果沒有結束從今日開始近30天日期,如果結束查詢開始到結束區間的日期

// 判斷是否已結束
if ($endtimd > time()) {
    // 當前日期
    $start_date = date("Y-m-d", time());
    // 30天前的日期
    $end_date = date('Y-m-d', strtotime("-30 day"));
} else {
    // 當前日期
    $start_date = date("Y-m-d", $begintime);
    // 30天前的日期
    $end_date = date('Y-m-d', $endtimd);
}

2、迴圈生成30日的時間陣列,為了方便合併 日期為陣列的鍵,值給了1做判斷

 // 生成30天日期
$section_date = [];
//獲得區間時間的時間列表
for ($i = strtotime($start_date); $i <= strtotime($end_date); $i += 86400) {
    $section_date[date("Y-m-d", $i)] = 1;
}

3、此處查詢資料庫的資料,省略了,但一般查出來都是缺少幾天的資料 例如:18日-19日-23日,中間缺少

假設陣列為$mysql_data

4、迴圈mysql_data 記錄資料,按照日期為鍵

// 治療記錄-鍵為日期
$treat_arr = [];
foreach ($data as $k=>$v){
    $treat_arr[$v['time']] = $v;
}

5、合併陣列 array_merge方法會對重複的鍵進行替換,後者替換前者,所以第一個值是日期陣列,第二個值是資料陣列

// 合併陣列
$treat_arr = array_merge($section_date,$treat_arr);

6、 到這裡 日期應該都不全了,但是沒有資料的日期值卻是‘1’,接下來遍歷處理

// 計算收益
foreach ($treat_arr as $k => &$v) {
    if ($v == 1){
        $v = array( //示例補全資料
            'num'=>0,
            'time'=>$k,
            'profit'=>0
        );
        $treat_thirty += $v['num'];
    }
}

打完收工……