商品30分钟倒计时,
//30分钟倒计时
Page({
/**
* 页面的初始数据
*/
data: {
order: [
{
_id: 'wersdfsdfe89',
status: 'unpay',//未支付状态
publicTime: '2022-10-28 00:11:59',//订单发布时间
countdown:'30:00'//倒计时
},
{
_id: 'sdfsdfsd654',
status: 'unpay',//未支付状态
publicTime: '2022-10-28 00:10:59',
countdown:'30:00'
}
]
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
//进行倒计时判断
const { order } = this.data
order.forEach(item => {
if (item.status === 'unpay') {
this.countdown(item._id, item.publicTime)
}
})
},
// 倒计时
countdown(_id, publicTime) {
const that = this
//倒计时结束时间,将发布时间转化为秒,然后加上30分钟,即30分钟倒计时
const endTime = new Date(publicTime).getTime() / 1000 + 30 * 60
//当前时间,转化为秒
const nowTime = new Date().getTime() / 1000
//时间差
let timeDiff = Math.floor(endTime - nowTime)
//判断倒计时是否超过30分钟,即时间差是否小于0
if (timeDiff < 0) {
//修改订单状态为 invalid已失效
that.updateOrder(_id,'status')
} else {
let myTime = setInterval(() => {
if (timeDiff < 0) {
//修改订单状态为 invalid已失效
that.updateOrder(_id,'status')
clearInterval(myTime)
return
} else {
//将时间转化为 分:秒
const t = that.formatTime(timeDiff)
//修改that.order中的countdown
that.updateOrder(_id,t)
}
timeDiff--
}, 1000);
}
},
//倒计时时间格式化
formatTime(totalSecond){
//剩余天数
//var day = Math.floor(totalSecond / 3600 / 24)
//n天后剩余小时数
// var hour = Math.floor(totalSecond /3600 % 24)
//n天n小时后剩余分钟数
var min = Math.floor(totalSecond / 60 % 60)
min = min<10 ? '0'+min:min
//n天n小时n分钟后剩余秒数
var sec = Math.floor(totalSecond % 60)
sec = sec<10 ? '0'+sec:sec
//return day + "天" + hour + "小时" + min + "分" + sec + "秒"
return min + ":" + sec
},
//修改订单,根据value值判断具体修改的属性
updateOrder(_id,value) {
let { order } = this.data
order.forEach(item => {
if (item._id === _id) {
if(value === 'status'){
//修改订单状态为 已失效invalid
item.status = 'invalid'
}else{
//更新倒计时属性
item.countdown = value
}
}
})
this.setData({
order
})
//根据_id,修改数据库中对应数据的status
},
})