目录
前序
用途
功能及事项
使用方法
代码及注释
前序:
总体来说,我更应该是一个 android 移动开发者,而不是一个 phper,如果说只做移动端的 APP ,我也不会学这么多,这 2年来,几乎所有的服务器接口都也是 由我一手操办,用的是 pHp,我是在很不愿意的情况下完成这个类的,因为 项目分工的 后台程序员,没完善这块,所以等不了他了,只能自己来搞,但这样自己的任务时间就少了。这个类的功能还是挺强大的,适合很多地方。 Whatever,enjoy this `Class`.
用途:
按照时间范围生成 sql 语句,然后以此获取改时间范围内的数据集合,常见的功能模块含有此类数据的有:曲线图,图标的数据按照时间显示;数据按照日期排序显示。对于这部分的功能数据返回,一半是由负责服务器后台的人来完成的,我们移动前端开发者,只需要调用接口就可以了。
功能及事项:
1,使用后产生的是,要查找的时间范围,根据传入参数选择生产,也可以组合 sql 语句返回,本例就是;
2,已实现:
1) 按 日 生成范围
2)按周 生成范围
3)按月 生成范围
4)按年 生成范围
3,所用语言是 php,服务器解析需要安装 Apache,或者 Nginx;
4,格式是时间戳,切记,拥有时间戳,就可以任意处理,可以生产这种日期时间格式: 2016-7-08 12:1:3;
5,常见的使用场景是,根据 时间范围 搜索数据;
6,我会提供一个链接供大家直接点击看 输出效果。
使用方法:
$controller =new TimeRangeHelper(); // 实例化 $func =$_REQUEST['func']; // 以 get 的方式或者 post 的方式 传入要调用的 函数名称 $controller->$func(); // 这里就会自动调用了 例如: 链接xxx ?func=RangeTest 试一试?
代码及注释:
1 <?php
2 /**
3 * Created by PhpStorm.
4 * Author: 林冠宏
5 * Date: 2016/6/4
6 * Time: 16:06
7 *
8 * 前序:
9 * 总体来说,我更应该是一个 android 移动开发者,而不是一个 phper,如果说只做移动端的 APP ,
10 * 我也不会学这么多,这么 2年来,几乎素有的服务器接口都也是 由我一手操办,用的是 pHp,目前大三,
11 * 我是在很不愿意的情况下完成这个类的,因为 项目分工的 后台程序员,没完善这块,我来搞,时间就不
12 * 够了。 Whatever,enjoy this `Class`.
13 *
14 * 功能:
15 * 1,产生 要查找的 时间范围
16 * 2,格式是 时间戳,拥有时间戳,可以任意处理
17 * 3,常见的使用场景是,根据 时间范围 搜索数据
18 */
19
20 class TimeRangeHelper{
21
22 /** 一天 和 一周的时间轴 大小是肯定的,月的天数不能确定,年也是,故不作定义 */
23 private $DayTime ;
24 private $WeekTime ;
25 private $openLog ; /** 是否开启调试信息输出 */
26
27 function TimeRangeHelper(){
28 $this->DayTime = 24*60*60;
29 $this->WeekTime = 7*24*60*60;
30 $this->openLog = true;
31 }
32
33 /** 整体测试函数 */
34 public function RangeTest(){
35 /** 日 测试 */
36 $this->GetTimeRang("日","2016-6-5");
37 $this->GetTimeRang("日");
38 $this->GetTimeRang("日","2015-6-1");
39 echo "</br>";
40 /** 周 测试 */
41 $this->GetTimeRang("周");
42 $this->GetTimeRang("周","-1");
43 $this->GetTimeRang("周","14");
44 $this->GetTimeRang("周","6");
45 echo "</br>";
46 /** 月 测试 */
47 $this->GetTimeRang("月");
48 $this->GetTimeRang("月","2015-5");
49 $this->GetTimeRang("月","2016-7");
50 $this->GetTimeRang("月","2016-11");
51 echo "</br>";
52 /** 年 测试 */
53 $this->GetTimeRang("年","2011");
54 $this->GetTimeRang("年");
55 $this->GetTimeRang("年","2015");
56 }
57
58 public function GetTimeRang($timeType = null,$selectTime = null){
59 header("content-type: text/html;charset=utf-8");
60 error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息
61 /** 默认是周 */
62 if($timeType == null){
63 $timeType ="周";
64 $this->GetWeekRange($timeType);
65 }else{
66 switch($timeType){
67 case "日": // 24小时内所有
68 $this->GetDayRange($selectTime);
69 break;
70 case "周": // 一周内所有
71 $this->GetWeekRange($selectTime);
72 break;
73 case "月":
74 $this->GetMonthRange($selectTime);
75 break;
76 case "年":
77 $this->GetYearRange($selectTime);
78 break;
79 default:
80 echo("参数错误!");
81 break;
82 }
83 }
84 }
85
86 /** -----------------获取 日 的范围----------------
87 * $selectTime 是否获取特定的 某一天 格式是 y-m-d
88 */
89 private function GetDayRange($selectTime){
90 /** 防止 日后 添加 日 可选功能,格式是 y-m-d */
91 if($selectTime==null){
92 $timeF = strtotime(date("Y-m-d",time()));
93 }else{
94 $timeF = strtotime($selectTime);
95 }
96 $timeL = $timeF + $this->DayTime;
97 if($this->openLog) {
98 echo "日获取范围->" . date("Y-m-d H:i:s", $timeF) . "-----" . date("Y-m-d H:i:s", $timeL) . "</br>";
99 }
100 return " and (entryTime between '$timeF' and $timeL''";
101 }
102
103 /** -----------------获取 周 的范围----------------
104 * $selectTime 是否获取特定的 某一周 格式是 整数,含负数
105 */
106 private function GetWeekRange($selectTime){
107 $timeF = strtotime(date("Y-m-d",time()));
108 $dayOfWeek = date("N",time());
109 $timeF = $timeF - (int)$dayOfWeek * $this->DayTime + 1; // 加一 纠正
110 /** 防止 日后 添加 周 可选功能,格式是 整数,含负数,指示 是距离当前这周的第几周 */
111 if($selectTime!=null){
112 switch($selectTime){
113 case 0: // 特殊情况 0 是本周
114 $timeL = $timeF + $this->WeekTime;
115 break;
116 case 1: // 特殊情况 1 下一周
117 $timeF = $timeF + 1 * $this->WeekTime;
118 $timeL = $timeF + 1 * $this->WeekTime;
119 break;
120 default:
121 $dis = abs($selectTime) - 1; // 获取差,别忘了绝对值
122 $timeL = $timeF + (int)$selectTime * $this->WeekTime;
123 // 位置纠正
124 if($timeL < $timeF){
125 $temp = $timeF;
126 $timeF = $timeL;
127 $timeL = $temp - $dis * $this->WeekTime;
128 }else{
129 $timeF = $timeF + $dis * $this->WeekTime;
130 }
131 break;
132 }
133 }else{
134 $timeL = $timeF + $this->WeekTime;
135 }
136 if($this->openLog) {
137 echo "周获取范围->" . date("Y-m-d H:i:s", $timeF) . "-----" . date("Y-m-d H:i:s", $timeL) . "</br>";
138 }
139 return " and (entryTime between '$timeF' and $timeL''";
140 }
141
142 /** -----------------获取 月 的范围----------------
143 * $selectTime 是否获取特定的 某一月 格式是 y - m
144 */
145 private function GetMonthRange($selectTime){
146 /** 防止 日后 添加 月 可选功能,格式是 y - m */
147 if($selectTime==null){
148 $dayNumOfMonth = date("t",time()); // 获取本月所有天数
149 $timeF = strtotime(date("Y-m",time()));
150 }else{
151 $dayNumOfMonth = date("t",strtotime($selectTime)); // 获取传过来的月所有天数
152 $timeF = strtotime($selectTime);
153 }
154 $timeL = $timeF + $dayNumOfMonth * $this->DayTime;
155 if($this->openLog) {
156 echo "月获取范围->" . date("Y-m-d H:i:s", $timeF) . "-----" . date("Y-m-d H:i:s", $timeL) . "</br>";
157 }
158 return " and (entryTime between '$timeF' and $timeL''";
159 }
160
161 /** -----------------获取 年 的范围----------------
162 * $selectTime 是否获取特定的 某一年 格式是 y
163 */
164 private function GetYearRange($selectTime){
165 /** 防止 日后 添加 月 可选功能,格式是 y */
166 if($selectTime==null){
167 $timeF = strtotime(date("Y",time())."-1-1");
168 $year = (int)date("Y",time()) + 1;
169 }else{
170 $timeF = strtotime($selectTime."-1-1");
171 $year = (int)$selectTime + 1;
172 }
173 $timeL = strtotime($year."-1-1");
174 if($this->openLog){
175 echo "年获取范围->".date("Y-m-d H:i:s",$timeF)."-----".date("Y-m-d H:i:s",$timeL)."</br>";
176 }
177 return " and (entryTime between '$timeF' and $timeL''";
178 }
179
180 }
181
182 $controller =new TimeRangeHelper();
183 $func =$_REQUEST['func'];
184 $controller->$func();