1.最近项目遇到了一个小问题,当订单需要支付的时候,超过指定时间自动关闭这个订单,未到达订单结束时间时,需要显示订单还有多久关闭,如下图:
2.写出的这个方法支持多个对象,看到技术群有很多人问这个问题而没有人回答,决定把这个解决方案贡献出来(不知道算不算好得解决方案)
3.我的解决方案是:后台给出订单的结束时间然后再去请求服务器当前的时间互相转换成时间戳然后相减得出的结果是xxx毫秒然后/1000就是真正的相差时间了
4.JS文件
page({data:{},onLoad:function(){varthatthis;//this的指向性问题需要在function外保存wx.request({url:'xxx',data:{xxx},success:function(result){that.setData({dataSourcesArray:result.data.order//请求到的数据});/***result.data.order是请求所有的订单信息*serviceTime是封装的请求服务器时间*服务器的时间格式是2018/08/0117:35:08**itemIndex是防止列表中的某一条数据已经被购买而导致修改数据时的错乱**/that.serviceTime(function(res){//服务器的时间戳varnowYearres.data.serviceTime.split('')[0];varnowTimenewDate(res.data.serviceTime).getTime();//这里传入只有未结束的订单varorderDetail[];for(vari0;iresult.data.order.length;i++){//如果订单未过期状态if(result.data.order[i].state'待付款'){result.data.order[i].itemIndexi;orderDetail.push(result.data.order[i]);}}result.data.orderorderDetail;that.operation(result);//待付款的订单传入这个方法内});}})},/**这里应该不要用setInterval应该用setTimeout的避免造成网络阻塞*/operation:function(result){//接收到没有结束的订单信息varthatthis;timesetInterval(function(){//循环执行that.serviceTime(function(res){//获取服务器时间that.resetState(res,result);//设置未到结束时间订单的状态});},1000);},//设置未结束订单的状态/***res请求获取服务器的时间的结果集**dataSourcesArray是显示页面的订单信息*/resetState:function(res,result){varnowTimenewDate(res.data.serviceTime).getTime();//当前时间的时间戳for(leti0;iresult.data.order.length;i++){//循环添加倒计时varindexresult.data.order[i].itemIndex;varstatus"dataSourcesArray["+index+"]."+'state';varshowTime"dataSourcesArray["+index+"]."+'showTime';varfutureTimenewDate(result.data.order[i].expiryTime).getTime();//未来的时间减去现在的时间;varresTime(futureTime-nowTime)/1000;//结束时间varzerofutureTime-nowTime;if(zero0){//认为还没有到达结束的时间vartimeSecondstimestampToTime(resTime);this.setData({[showTime]:timeSeconds})}else{//结束的时间已经到了result.data.order.splice(i,1);//该订单自动结束时间从这个列表中删除就不必老是循环他this.setData({[showTime]:"超过时间订单已经关闭",[status]:"订单过期"});}if(result.data.order.length0){//如果没有可支付订单则停止这个订单clearInterval(time);}}},//请求到系统时间调取成功之后执行回调函数serviceTime:function(fn){wx.request({url:'https://www.xxx.cn/getTime',//仅为示例,并非真实的接口地址header:{'content-type':'application/json'//默认值},success(res){fnfn(res);}})}})//时间转换functiontimestampToTime(s){varhMath.floor(s/3600%24);varminMath.floor(s/60)%60;varsecs%60;hadd(h);minadd(min);secadd(sec);returnh+':'+min+':'+sec}//添0functionadd(m){returnm10?'0'+m:m}5.wxml文件
!--如果是待付款状态则会显示倒计时--viewwx:for"{{dataSourcesArray}}"wx:for-item"item"wx:key"key"viewwx:if"{{item.state'待付款'}}"class"showTime"textclass"title"剩余支付时间/texttextclass"content"{{item["showTime"]}}/text/view/view6.最终效果图如下(支持多个列表):
(当页面离开时应该清除这个定时器页面进来时也要触发!)7.QQ微信技术群:561696357
小程序订单倒计时系列-小程序实现倒计时-小程序倒计时功能
浏览量:2051
时间:
来源:做一个快乐的肥仔
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










