内容:
一、实现过程
二、小程序段的逻辑实现
一、实现过程:
1修改数据库查询语句:
eg:当后台提交查询后到数据库SQL的代码大致如下:select * from xx_table where _time like '2012-12%' and id=_id and.....按照(yyyy-MM)的格式格式化日期然后传递查询就可以了。。从小程序开始,小程序只需要传这种格式的字符串
//获取当前时间 var date = new Date(); date = util.format(date, "yyyy-MM") . . . //根据月份查询 net.requestURL(CONST.jcs_base_url + "xx/expend.html", { date: that.data.date, //这里的date就是格式化后的字符串 pageNo: that.data.pageNo, pageSize: that.data.pageSize }, "POST").then(data => { that.setData({ list: data.data.responseBody.expends, totalCount: data.data.responseBody.totalCount });提交过后Java后台接收到数据
jsobj.getString("date");//获取小程序传到后台的date。如果为空就查询当前月份的。不为空就直接执行查询了。不知道会有什么安全隐患没有。 String date = jsobj.getString("date"); if(date == null){ date = new SimpleDateFormat("yyyy-MM").format(new Date()); }Pagination pagination = XXRecordMng.getPageByDate(merber.getId(),date, jsobj.getInt("pageNo"), jsobj.getInt("pageSize"));然后将查询到的结果返回到小程序二、小程序逻辑实现

分三个部分(1)点击时间选择器触发查询。(2)左右箭头表示上个月和下个月。
(1)选择器触发查询
小程序头部的代码 <view class="title"> <image src='/images/mian/left.png' mode='aspectFit' bindtap='preMonth'></image> <picker mode="date" value="{{date}}" fields="month" bindchange="bindDateChange"> <view >{{year}}年{{month}}月</view> </picker> <image src='/images/mian/right.png' mode='aspectFit' bindtap='nextMonth'></image> </view>bindDateChange:function(e){ var that = this var year = new Date(e.detail.value).getFullYear()//年月的显示是分开的。没有使用更简单的 var month = new Date(e.detail.value).getMonth() if ((month = month+1) < 10){ month="0"+month; } this.setData({ year:year, month:month, date: e.detail.value, totalCount: 0, pageNo: 1,//更换日期从第一页查询 }) //根据月份查询 net.requestURL(CONST.jcs_base_url + "xxxx/expend.html", { date: that.data.date, pageNo: that.data.pageNo, pageSize: that.data.pageSize }, "POST").then(data => { that.setData({ list: data.data.responseBody.expends, totalCount: data.data.responseBody.totalCount }); }); },(2)左右箭头:两种
//转化为正常思维写的代码。nextMonth:function(){ var that = this; var date = new Date(this.data.date); var year = date.getFullYear(); var month = date.getMonth();//0-11 var e={detail:{ value:"666" }} month = month + 1;//正常思维1-12 month = month + 1;//下一个月 if ((month) > 12){ //下一年 year = year + 1; month = month - 12; } //将新的日期赋值 date.setFullYear(year); date.setMonth(month-1); //上面已经做过赋值,转化为字符串要要在所有运算操作之后,否则需要使用显转 if (month < 10) { month = "0" + (month); } date = util.format(date, "yyyy-MM") this.setData({ year: year, month: month, date:date }) //由于改变了picker的value不会触发change事件,手动包装触发 var e={ detail:{ value:date } } this.bindDateChange(e); },使用逻辑角度直接运算var that = this;var date = new Date(this.data.date);var year = date.getFullYear();var month = date.getMonth();month = month + 1;if ((month) > 11){ //下一年 year = year + 1; month = month - 12;}//将新的日期赋值date.setFullYear(year);date.setMonth(month);//上面已经做过赋值,转化为字符串要要在所有运算操作之后,否则需要使用显转if (month < 9) { month = "0" + (month+1);}else{ month = month + 1;} date = util.format(date, "yyyy-MM")this.setData({ year: year, month: month, date:date})記錄為伴,就写到这,有需要再补充!
YQY
ABCDEFAG













