核心代码参考: https://blog.csdn.net/u014175572/article/details/54890964
根据用户选定的时间点(年、月)、取该时间前十二个月的数据显示。思路:①获取用户选定的时间、传入后台、计算好时间段、放入数据库搜索条件、获得数据。②后台直接获取到该时间段内(年)、取两年时间的数据、前台根据获得的(月)进行推算、获得符合的前十二个月的年月、与后台获取数据进行时间匹配、显示数据。
我这里是第二种处理方式。
使用场景:
用户在提供的年、月时间控件上选择想查看的时间点的数据、并期望可以对比此前十二月的数据。
①。后台根据传入的年份(int year)进行数据选择(var sql = "select * from DBTable where [Year] between" + year-1 "and"+ year +"order by [Year] asc, [Month] asc")、即根据用户选择的年份从数据库获取这个年份上一年的数据也筛选出来。比如:用户选择的是2018年1月、那么我们从后台取出2018年及2017年的数据。
②。将后台传出的数据、只显示我们想要的数据
getLast12Months: function (data,y, m) { //data:获取的2017、2018的数据(未筛选的);y:year用户选择的年份;m:month用户选择的月份 var d = new Date(y,m); //将年月时间格式化 var last12Months = []; //符合该年月此前十二个月的年月 for (var k = 0; k < 12; k++) { d.setMonth(d.getMonth()-1); var month = d.getMonth() + 1; last12Months.push(d.getFullYear() + "-" + month); //格式为:年-月(如:2018-1) } var sin12Data = data; var last12Datas = []; //筛选出十二个月数据 for (var i = last12Months.length - 1; i >= 0; i--) { var lastMonth = last12Months[i]; for (var j = 0; j < sin12Data.length; j++) { var dataYM = sin12Data[j].Year + "-" + sin12Data[j].Month; if (lastMonth === dataYM) { //比如有 “2018-1” === “2018-1” last12Datas.push(sin12Data[j]); //把这条数据存入last12Datas即可 } } } return last12Datas; }