需求是这样的,要统计页面的访问次数,要求按自然月、周、日统计,什么意思呢?
就是统计周期是到月底算一个月,不管是月中还是月初开始统计的,只要到了下个月1号,一律归零重新计数。周和日同理。
先贴代码吧:
//更新访问统计
function click(){
$nowtime = time();
$nowyear = date("Y",$nowtime);//当前年份数字
$nowmonth = date("n",$nowtime);//当前月份数字
$nowweek = date("W",$nowtime);//当前一年中的第几周
$nowday = date('j',$nowtime);//当前一个月的第几天
$data = array(
"total_click"=>$this->_record['total_click']+1,
);
if($nowyear == date("Y",$this->_record['month_uptime'])){//判断是否同一年
if($nowmonth <= date("n",$this->_record['month_uptime'])){
$data['month_click'] = $this->_record['month_click']+1;//月统计+1
if($nowweek <= date("W",$this->_record['week_uptime'])){
$data['week_click'] = $this->_record['week_click']+1;//周统计+1
if($nowday <= date('j',$this->_record['today_uptime'])){
$data['today_click'] = $this->_record['today_click']+1;//日统计+1
}else{//跨日,归零日统计
$data['today_click'] = 1;
$data['today_uptime'] = $nowtime;
}
}else{//跨周了,归零周以下的统计
$data['week_click'] = $data['today_click'] = 1;
$data['week_uptime'] = $data['today_uptime'] = $nowtime;
}
}else{//跨月,归零统计数据
$data['month_click'] = $data['week_click'] = $data['today_click'] = 1;
$data['month_uptime'] = $data['week_uptime'] = $data['today_uptime'] = $nowtime;
}
}else{//恰好跨年,则归零月以下的数据
$data['month_click'] = $data['week_click'] = $data['today_click'] = 1;
$data['month_uptime'] = $data['week_uptime'] = $data['today_uptime'] = $nowtime;
}
M('tongji')->where(array("type"=>$this->_type,"pid"=>$this->_pid))->save($data);//更新统计数据
exit('0');
}$this->_record 这个是旧记录。我的逻辑是:
先判断年份,避免去年的12月比今年的1月大,如果跨年了,则归零月、周、日的统计
然后判断月份,如果跨月了,就归零月、周、日计数,否则月计数+1
判断周数,如果跨周了,归零周、日计数,否则周计数+1
判断天数,如果过了0点了,归零天计数,否则天计数+1
字段解释:
month_click 月计数
month_uptime 上次月更新时间点,只在归零月计数的时候刷新
week_click 周计数
today_click 当天计数
..
最佳答案