最近写项目,遇到一个将选中时间段平均分割为若干小段,然后根据小段时间在数据库查询求均值的问题,后台大哥犯懒,非说后台做不了,让我分好传给他ヾ(。 ̄□ ̄)ツ゜゜゜好气呦,但还要保持微笑,我就是这么懂礼貌的好孩子ー( ̄~ ̄)ξ
闲话不多说,来说实现过程
最开始只是分固定时间段,每天两小时一分,也就直接全写了,后来需求变了,日期选择输入,想要多少天就要多少天,时间大了要求取到的数据量还是那么多
我:不太好实现啊老板
boss:啥?别人都能做到,你咋就做不到?你这技术水平怕是有点低了把?
我:那我试试(MDZZ)
先确定后台需要什么数据格式,按照存入格式,先写个方法
1 function range(beginTime, endTime) {//存入格式 2 this.beginTime = beginTime; 3 this.endTime = endTime; 4 }
考虑到这是一个js文件,数据分割也是固定的等分,就写一个从外部获取参数的函数吧,TimeRange(startTime,endTime)函数用来供页面调用,只传入开始时间,结束时间,不写分多少组了,因为需要的数据总量一般都是固定的,分多少组也是固定的,哪里需要直接来js改就好了
1 function TimeRange(startTime, endTime) { //传入开始时间var startTime 传入结束时间var endTime 传入格式xxxx-xx-xx 年月日 2 var amount = 100; //定义分多少组 3 var startTimes = startTime + " 00:00:00"; //日期添加时分秒 开始日期 4 var endTimes = endTime + " 23:59:59"; //日期添加时分秒 结束日期 5 }
判断一波
1 if(endTimes <= startTimes) { 2 alert('结束日期必须大于开始日期!'); 3 return -1; 4 } 5 6 if(dataDiff > 15) { 7 alert('单次查询日期不超过两周,请重新选择!'); 8 return -2; 9 }
既然平均分,那就得知道时间间隔,计算时间间隔,写个方法直接调用
1 //计算天数差的函数,通用 2 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式 3 var aDate, oDate1, oDate2, iDays 4 aDate = sDate1.split("-") 5 oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2006格式 6 aDate = sDate2.split("-") 7 oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) 8 iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) //把相差的毫秒数转换为天数 9 return iDays 10 }
整理了一下逻辑,伪代码如下
1 //计算时间段总时间,分割后每段时间间隔,单位(秒) 2 var timeRange;//存储计算出的时间段 3 var timeAll ; //总时间间隔 4 var timeGap ; //分割后时间间隔 5 var slidingTime = 0; //循环开始条件 6 var momentTime_front; /