<hr>
```
//當天時間
$where['time'] = array(
array('egt',strtotime(date('Y-m-d',time()))),
array('lt',strtotime(date('Y-m-d',time())).'+1 day')
);
// 本周時間
$where['time'] = array(
array('egt',strtotime(date('Y-m-d',time())).'-'.date('w',time()).' day'),
array('lt',strtotime(date('Y-m-d',time())).'+1 week -'.date('w',time()).' day')
);
// 本月時間
$where['time'] = array(
array('egt',strtotime(date('Y-m',time()))),
array('lt',strtotime(date('Y-m',time()).'+1 month'))
);
// 本年時間
$where['time'] = array(
array('egt',strtotime(date('Y',time()))),
array('lt',strtotime(date('Y',time()).'+1 year'))
);
//獲取近一周時間
$date7 = date('Y-m-d', strtotime('-7 days'));
$date1 = date('Y-m-d', strtotime('-1 days'));
$where['time'] = array(
array('egt',strtotime($date7)),
array('lt',strtotime($date1))
);
```
<hr>
# php+mysql統計7天、30天每天數據沒有補0
用PHP進行處理
$day為變量,這個日期我們可以定義,比如最近7天 $day為7就可以了,最近30天$day為30就可以了
~~~php
$day = 30 ;for ($i = $day - 1; 0 <= $i; $i--) {$result[] = date('m-d', strtotime('-' . $i . ' day'));$nums[] = 0;}
~~~
這里我們構造最近30天數據,$day = 30
就會得到兩個集合 $result 日期集合 $nums 日期對應數量集合
接下來利用array_walk進行循環,沒有的補領
$scan_qushi 是我們運用最開始查詢7天的那個數據查詢方式查詢出來近30天的數據(存在沒有的)
~~~php
array_walk($scan_qushi, function ($value, $key) use ($result, &$nums) {$index = array_search($value['datetime'],$result);$nums[$index] = $value['count'];});$data = ['day' => $result,'nums' => $nums];
~~~
$result 日期 $nums 日期對應的數量,到此,我們完美的取出來了最近30天的數據。并且進行輸出。
~~~php
$data = ['day' => $result,'nums' => $nums];
~~~
這樣就可以交給echart工具進行數據展示了
<hr>
# php+mysql獲取7天、30天的統計數據,沒有數值的補充0
```
$order_list = db('orders')
->field('count(*) as count,date(FROM_UNIXTIME(ctime,"%Y%m%d")) as ctime,sum(total) as total')
->group("date_format(from_unixtime(ctime),'%Y%m%d')")
->where('DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(ctime))')
->select();
//sql語句
//SELECT count(*) as count,date(FROM_UNIXTIME(ctime,"%Y%m%d")) as ctime,sum(total) as total FROM `qqxz_orders` WHERE ( DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(ctime)) ) GROUP BY date_format(from_unixtime(ctime),'%Y%m%d')
$order_list_arr = $order_list->toArray();
$day = 7;
for ($i = $day - 1; 0 <= $i; $i--) {
$result[] = date('Y-m-d', strtotime('-' . $i . ' day'));
$nums[] = 0;
$total[] = 0;
}
array_walk($order_list_arr, function ($value, $key) use ($result, &$nums,&$total) {
$index = array_search($value['ctime'],$result);
$nums[$index] = $value['count'];
$total[$index] = $value['total'];
});
$data = [
'day' => $result,
'nums' => $nums,
'total' =>$total
];
halt($data);
```
<hr>
php獲取未來七天的日期和星期代碼
第一步:獲取需要天數的日期,然后調用函數
//獲取未來七天的日期
for($i=1;$i<8;$i++){
$dateArray[$i]=date('Y-m-d',strtotime(date('Y-m-d').'+'.$i.'day'));
};
$date = $this->get_date($dateArray);//調用函數
第二步:日期和星期函數
/*
* 返回輸入日期數組對應的星期和日期
* @param $dateArray 需要的日期數組,如未來七天的日期
* */
function get_date($dateArray){
$b=array();
foreach($dateArray as $key=>$value){
$b[]=array('id'=>$key,'date'=>$value);
};
foreach($b as $k=>$v){
$b[$k]['week']=$this->get_week($v['date']);
$b[$k]['date']=$v['date'];
}
return $b;
}
/*
* 返回輸入日期星期幾
* @param $date 日期
* */
function get_week($date){
$date_str=date('Y-m-d',strtotime($date));
$arr=explode("-", $date_str);
$year=$arr[0];
$month=sprintf('%02d',$arr[1]);
$day=sprintf('%02d',$arr[2]);
$hour = $minute = $second = 0;
$strap = mktime($hour,$minute,$second,$month,$day,$year);
$number_wk=date("w",$strap);
$weekArr=array("周日","周一","周二","周三","周四","周五","周六");
return $weekArr[$number_wk];
}
<hr>
# ThinkPHP5 (mySQL) 統計各個時間段內的訂單量
背景
今天在進行后臺數據監控時;
需要對一天24小時的下單量進行時間段的統計;
但是下單時間字段 pay_time 選取的是 timestamp 類型;
此時需要進行時間段的數據分組剝離,在此做一下實現方式,請多指教 …
環境
框架:ThinkPHP5.1.2
系統:nginx/win10 、phpStudy2017
1
2
實現方式
1. 首先,考慮到使用的是 group分組技巧;
那么就必須要將 pay_time 中記錄的字段數據進行 24時的定位切分;
這里可以用到 substring() 方法的支持 【字段取值舉例:2019-08-23 09:25:09】
2. 以我的 ThinkPHP5框架的代碼規范
源碼書寫如下:
```
$res = Db::name('order_goods og')
->field("substring(pay_time,12,2) hour,count(og.id) count")
->join("order_infos oi","oi.order_id = og.order_id")
->where([ ["pay_status","=",1]])
->group('hour')
->order('hour','asc')
->select();
// 即對應的原生sql語句為
SELECT substring(pay_time,12,2) hour,count(og.id) count FROM tp5_xorder_goods og
INNER JOIN `tp5_xorder_infos` `oi` ON `oi`.`order_id`=`og`.`order_id`
WHERE `pay_status` = 1
GROUP BY `hour`
ORDER BY `hour` ASC
```
##### 3\. 之后就是對得到的數據進一步的整理
* 以我使用`ECharts圖表庫`進行數據展示為例,那么我的處理方式如下:
```
$timeRes = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
foreach ($timeRes as $key => $value){
foreach ($res as $key2 => $value2){
$hour = intval($value2['hour']);
if ($key == $hour){
$timeRes[$key] = $value2['count'];
//echo "hour:".$hour.";key:".$key.";count:".$value2['count']."<br/>";
break;
}else{
continue;
}
}
}
```
<hr>
# php (thinkPHP)計算連續登陸天數
```
/**
* 計算當月連續登陸天數
*/
$smonthtime=strtotime(date("Y-m-01")); //當月第一天
$emonthtime=strtotime("+ 1 month",$smonthtime);//當月最后一天一天
$sdaytime=strtotime(date("Y-m-d",time()));//當天開始時間
$user = M('user')->field('logintime,lastlogintime,logindays')->where("id=3")->find();
if( $user['lastlogintime'] < $sdaytime ) { //如果是當天第一次登陸
$logindays = intval($user['logindays']);
if ($user['lastlogintime'] > $smonthtime && $user['lastlogintime'] < $emonthtime) { //上次登陸在本月
$datetime1 = new \DateTime(date('Y-m-d', $user['lastlogintime']));
$datetime2 = new \DateTime(date('Y-m-d', $user['logintime']));
$interval = $datetime1->diff($datetime2);//和上次登陸相差天數
$diffday = $interval->format('%d');
if ($diffday == 1) { //如果相差1天,則為連續登陸
$logindays += 1;
} else { //不是連續登陸,重置連續登陸天數為1
$logindays = 1;
}
} else { //上次登陸時間不是在本月,重置連續登陸天數為1
$logindays = 1;
}
}
M('user')->where("id=3")->setField("logindays",$logindays);
```
<hr>
```
date_default_timezone_set('PRC'); //默認時區
//當前的時間增加5天
$date1 = "2014-11-11";
echo date('Y-m-d',strtotime("$date1 +5 day")); //輸出結果:2014-11-16
//相應地,要增加月,年,將day改成month或year即可
//+++ 今天、昨天、明天 、上一周、下一周 +++++++++
echo "今天:",date("Y-m-d",time()),"<hr>";
echo "昨天:",date("Y-m-d",strtotime("-1 day")), "<hr>";
echo "明天:",date("Y-m-d",strtotime("+1 day")), "<hr>";
echo "一周后:",date("Y-m-d",strtotime("+1 week")), "<hr>";
echo "一周零兩天四小時兩秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>";
echo "下個星期四:",date("Y-m-d",strtotime("next Thursday")), "<hr>";
echo "上個周一:".date("Y-m-d",strtotime("last Monday"))."<hr>";
echo "一個月前:".date("Y-m-d",strtotime("last month"))."<hr>";
echo "一個月后:".date("Y-m-d",strtotime("+1 month"))."<hr>";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<hr>";
```
<hr>
本文實例講述了php獲取本周星期一具體日期的方法。分享給大家供大家參考。具體如下:
```
private function mondayTime($timestamp=0,$is_return_timestamp=true){
static $cache ;
$id = $timestamp.$is_return_timestamp;
if(!isset($cache[$id])){
if(!$timestamp) $timestamp = time();
$monday_date = date('Y-m-d',$timestamp-86400*date('w',$timestamp)+(date('w',$timestamp)>0?86400:-/*6*86400*/518400));
if($is_return_timestamp){
$cache[$id] = strtotime($monday_date);
}else{
$cache[$id] = $monday_date;
}
}
return $cache[$id];
}
echo $this->mondayTime(time() + 24*3600*2,false);
exit;
```
希望本文所述對大家的php程序設計有所幫助。
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
<hr>
以下是幾個獲取時間接點的方法,先獲取查詢范圍,再組織語句進行查詢。
//php獲取今日開始時間戳和結束時間戳
$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));
$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
//php獲取昨日起始時間戳和結束時間戳
$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
$endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
//php獲取上周起始時間戳和結束時間戳
$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
$endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
//php獲取本月起始時間戳和結束時間戳
$beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
$endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));
PHP mktime() 函數用于返回一個日期的 Unix 時間戳。
語法
mktime(hour,minute,second,month,day,year,is_dst)
參數 描述
hour 可選。規定小時。
minute 可選。規定分鐘。
second 可選。規定秒。
month 可選。規定用數字表示的月。
day 可選。規定天。
year 可選。規定年。在某些系統上,合法值介于 1901 - 2038 之間。不過在 PHP 5 中已經不存在這個限制了。
is_dst 可選。如果時間在日光節約時間(DST)期間,則設置為1,否則設置為0,若未知,則設置為-1。
使用一個between限制時間段在一個起始時間和終止時間之間,然后查詢這個時間段的數據。
$map['time'] = array('BETWEEN',array($beginThismonth,$endThismonth));
$mrecharge = $User_recharge->where($map)->sum('recharge_num');
注意:date()中'Y-m-d H:i:s'中的H大寫代表24小時制,小寫h代表12小時制。
- 空白目錄
- thinkcmf的權限管理
- thinkcmf+unicmf添加頁面
- Thinkphp5做后臺 Uni-app做前臺解決跨域問題
- 組件
- h5跨域-uniapp
- thinkphp5 auth 教程
- thinkphp5Auth類
- uniapp添加與編輯的差別
- 常見的請求方式
- uni 單選回顯數據_uniapp 頁面跳轉傳值和接收
- uni-app 單選/多選/滑動 demo
- 關于uniapp checkbox多選框如何傳值傳數據
- uniApp 多選框checkbox ,判斷是否選中
- uniapp添加復選框和獲取復選框的值
- uni-app中全選多選單選
- uniapp多選框CheckBox 數據接收
- uniapp下拉列表單選框復選框實戰demo(編輯或詳情頁)
- uni-data-CheckBox-OK
- js 字符串數組轉換成數字數組
- js把字符串轉為數組對象
- js中數組對象字符串的相互轉換
- JS怎么把字符串數組轉換成整型數組
- 小程序開發
- tp5.1跨域請求
- uniapp-h5跨域
- 新增
- order
- uni-app中調取接口的三種方式與封裝uni.request()
- uView-checkbox
- 給u-view的u-select賦值
- uView-下拉框、復選框、單選框 數據發送及接收
- CURD操作
- thinkphp5.1增刪改查
- TP5.1添加數據成功之后返回自增主鍵id
- Thinkphp實戰之Request默認值except only 以及過濾參
- uni-app跨域解決方案
- thinkphp5.1+uni-app接口開發中跨域問題解決方案
- tp6 + uniapp 前后端跨域解決方案
- uniapp-token相關
- uniapp request請求封裝包含token兼容多端,簡單易用
- CORS.php
- ThinkPHP6 API開發前后端分離用戶信息保存在后端的方法
- thinkphp的jwt(JSON Web Token)身份驗證
- thinkphp6增刪改查
- PHP模擬GET,POST請求
- php模擬get、post發送請求的6種方法
- thinkphp6
- uniapp封裝網絡請求
- thinkphp6搭建后端api接口jwt-auth
- uniapp實現APP微信登錄流程
- [uni-app] 中保持用戶登錄狀態
- 詳解vue中localStorage的使用方法
- vue 實現通過vuex 存儲值 在不同界面使用
- dispatch:異步操作,數據提交至 actions ,可用于向后臺提交數據
- ThinkPHP6.0 + Vue + ElementUI + axios 的環境安裝到實現 CURD 操作
- tp6錯誤集
- TP6 模型插入/添加數據,自動插入時間(自動時間戳)
- 手機不開機維修思路
- thinkphp6解決vue跨域問題
- 從0基礎獲取短視頻去水印解析接口制作
- thinkphp5 刪除緩存
- thinkPHP,怎么把json文件里面的數據導入數據庫
- 數字轉字符php
- php – 直接用curl下載遠程文件
- thinkphp – 直接用curl下載遠程文件
- apiAdmin安裝
- echart
- thinkphp開發小程序推廣分享帶參數二維碼生成
- php同比增加函數
- PHP獲取同比上周、上一個月,上一個季度,去年時間區間
- “前3秒”金句100例,趕緊收藏起來!
- PHP配合微信公眾號生成推廣二維碼
- thinkphp5+php微信公眾號二維碼掃碼關注推廣二維碼事件實現
- 獲取當前時間上一周的開始時間和結束時間
- TP6 查找指定工作日
- PHP 獲取當天、近一周、本周、上月、本月、本季度、上季度時間方法大全
- php獲取今日、昨日、本周、本月 日期方法
- Tp5+mysql按年季度月周日小時查詢時無數據的時間段補0方法
- mysql按天統計的時候,該天沒有數據也要統計為0
- 列出一星期的日期 無數據補0
- thinkphp6本周 上周 周一 周末日期
- 補全日期 無數據補0
- php+pv統計代碼實現,Laravel 10 行代碼實現簡單的網站 pv uv 統計
- 通過API獲取ip地址以及城市和運營商
- 獲取訪客信息
- 13行代碼實現微信小程序設置概率觸發激勵視頻閱讀文章
- uniapp 微信小程序 獲取場景值和場景值個性化參數
- 微信小程序分享小程序碼的生成(帶參數)以及參數的獲取
- 小程序推廣分享帶參數二維碼生成
- uniapp微信小程序生成對應頁面二維碼
- uniapp獲取當前頁面url
- uniapp微信小程序--微信登錄
- 微信小程序,生成小程序碼中scene參數的存放和獲取問題
- uni-app 微信小程序生成二維碼帶參數
- uni-app 微信小程序如何把圖片保存到本地相冊?
- thinkPHP5使用assign()傳遞富文本,前端解析成HTML標簽
- tp6解析編輯器里面的html標簽原樣輸出
- PHP判斷url鏈接是否被百度收錄
- 微擎安裝模塊時提示 Failed to connect to we7.rewlkj.com port 80: Timed out
- 小程序碼生成
- thinkphp開發小程序推廣分享帶參數二維碼生成0
- tp3.2偽靜態
- apiadmin安裝教程-2022.8更新
- autojs事件代碼
- uuuu
- thinkphp6: API 多版本控制