<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 多版本控制