小程序订单倒计时有订单详情的到计时和订单列表的倒计时
单个倒计时
采用了setInterval()定时器:主要思路就拿到一个订单支付时间,加上一个到计时的时间,然后减去本地获取到的时间(时间都采用时间戳算)
computedLastPayTime() {
let self = this;
self.setData({
interval:setInterval(function () {
let ordTime = self.data.orderTime
var format = ordTime.replace(/-/g, '/')//兼容苹果和安卓系统时间
let createTime = Date.parse(format) / 1000;
let endTime = createTime + 1800;//此处1800为倒计时半小时,自由根据时间转换时间戳
let clientTime = Date.parse(new Date()) / 1000;
let lastTime = endTime - clientTime;
let int_minute;
if (lastTime > 0) {
int_minute = Math.floor(lastTime / 60);//Math向下取整
if (int_minute < 10) {
int_minute = "0" + int_minute;//当分钟小于10时前面补0
}
lastTime -= int_minute * 60;
if (lastTime < 10) {
lastTime = "0" + lastTime;
}
self.setData({
int_minute: int_minute,
lastTime: lastTime
})
} else if (Math.floor(lastTime) ==0){
self.cancelOrder()
// self.getOrderlist();
}else{
}
self.statusTextChange()
}, 1000)
});
},
批量的倒计时
采用了setTimeout()延时器:批量到计时和单个倒计时时间算法相同,主要循环出需要倒计时的时间列表
getpink: function () {
let that = this;
var pinkEntityList = that.data.result//拿一个总的数组数据
var endtime = {}
for (var i = 0; i < pinkEntityList.length; i++) { //循环出时间
var status = pinkEntityList[i].status//拿订单列表中订单状态/无状态要求后面均可去除相关
const orderId = pinkEntityList[i].orderId//拿订单的ID做为创建新数组的唯一键值
if (status == 4) {
let ordTime2 = pinkEntityList[i].createTime
var format = ordTime2.replace(/-/g, '/')
let createTime = Date.parse(format) / 1000;
var nowdate = (new Date()) / 1000;
var second = Math.floor(createTime + 1800 - nowdate); //时间差
if (second > 0) {
let hou = parseInt(second % (60 * 60 * 24) / 3600);
let min = parseInt(second % (60 * 60 * 24) % 3600 / 60);
let sec2 = parseInt(second % (60 * 60 * 24) % 3600 % 60);
// 天数位
var day = Math.floor(second / 3600 / 24);
var dayStr = day.toString();
if (dayStr.length == 1) dayStr = '0' + dayStr;
// 小时位
var hr = Math.floor((second - day * 3600 * 24) / 3600);
var hrStr = hr.toString();
if (hrStr.length == 1) hrStr = '0' + hrStr;
// 分钟位
var min = Math.floor((second - day * 3600 * 24 - hr * 3600) / 60);
var minStr = min.toString();
if (minStr.length == 1) minStr = '0' + minStr;
// 秒位
var sec = Math.floor(second - day * 3600 * 24 - hr * 3600 - min * 60);
var secStr = sec.toString();
if (secStr.length == 1) secStr = '0' + secStr;
endtime[orderId] = hrStr + ':' + minStr + ':' + secStr//以orderId为键创建新的数组
} else if (second == 0) {
const orderId = pinkEntityList[i].orderId
order.cancelOrder(orderId).then(res => {
that.getOrderlist();
}).catch(() => { })
that.getOrderlist()
}
else {
}
} else {
}
}
var pinkEntityList2 = []
that.setData({
newPin: endtime
})
var mytime = setTimeout(this.getpink, 1000);//每秒执行一次
// 保存定时器name
that.setData({
timer: mytime
})
},
.wxml
<view>剩余可支付时间: {{newPin[item.orderId]}}</view>