PHP 查詢指定日期區間的記錄(沒有記錄的日期補全辦法)、近.30天查詢
阿新 • • 發佈:2019-02-18
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']; } }
打完收工……