vue中实现订单支付倒计时

需求

创建订单后15分钟内进行支付,否则订单取消。

实现

思路:

获取当前时间和支付超时时间(在创建时间的基础上增加15分钟即为超时时间,倒计时多久根据自己的实际需求,这里为15分钟),支付超时时间减去当前时间获取间隔的毫秒数(ms,1s = 1000ms),若为负数则表示订单超时,若为正数表示未超时,然后利用 setInterval 每过一秒间隔时间 -1000,当间隔时间小于等于0时,倒计时结束支付超时,取消订单。

代码实现:

javascript 复制代码
data(){
	return {
		minutes: '', //倒计时分钟
		seconds: '', //倒计时秒
		isEnd: false, //支付超时
	}
}
methods: {
        // 倒计时
        countDown(){    
        	// 当前时间
            let nowTime = new Date()
            // 获取创建订单15分钟后的时间,this.payForm.create_time:订单创建时间
            let endTime = new Date(this.payForm.create_time);
            endTime.setMinutes(endTime.getMinutes() + 15) // 结束时间,获取创建订单15分钟后的时间

            // 两个日期相差的时间戳,以毫秒为单位(1000ms = 1s)
            let totalTime = endTime - nowTime

            // 结束时间大于现在的时间
            if(totalTime>0){
                let timer = setInterval(() => {

                    if (totalTime >= 0) {

                        //获取分钟数
                        let minutes = 
                            Math.floor((((totalTime % (3600 * 24 * 1000)) / 1000) % 3600) / 60);
                        //获取秒数
                        let seconds = 
                            Math.floor((((totalTime % (3600 * 24 * 1000)) / 1000) % 3600) % 60).toString().padStart(2, "0");;

                        this.minutes = minutes
                        this.seconds = seconds

                        totalTime -= 1000;
                        // console.log(totalTime)
                    } else {
                        clearInterval(timer); // 停止调用函数 
                        this.isEnd = true
                    }
                }, 1000); 

            }else{
                this.isEnd = true
            }  
}

拓展

上面案例只需要进行分钟及秒的计算,倒计时时间长点的话可能会涉及到天数及小时数的计算,思路与上面案例相同,了解天数及小时数的时间戳转换公式即可,码代如下。

javascript 复制代码
//totalTime: 时间间隔,单位ms
let totalTime = endTime - createTime
//获取天数
let day = Math.floor(totalTime / 1000 / 3600 / 24);
//获取小时数
let h = Math.floor((totalTime % (3600 * 24 * 1000)) / 1000 / 3600);
相关推荐
程序员鱼皮6 分钟前
我花 300 块,让 Claude Fable 5 开发桌面 APP,值么?
前端
William_Xu12 分钟前
JavaScript 并发控制
前端
拾年27512 分钟前
从零手写 Ajax:用原生 XHR 搭建前后端交互全流程
前端·javascript·ajax
光影少年13 分钟前
懒加载与分包:React.lazy + Suspense
前端·react.js·掘金·金石计划
拉勾科研工作室26 分钟前
区块链工程毕业论文题目【249个】
开发语言·javascript
小林ixn28 分钟前
你以为你懂 + 号?看完这篇 Bun + TS 实战,才发现以前全写错了
前端·javascript·typescript
namexingyun1 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
Zyed1 小时前
[STM32]Day15读写FLASH+读取ID
前端·stm32·性能优化
jvxiao2 小时前
你真的懂作用域吗?从编译原理角度深度 JS 的作用域
前端·javascript
Darling噜啦啦2 小时前
二叉树与递归算法实战:从树结构到 LeetCode 爬楼梯,一文吃透前端数据结构与递归思维
前端·javascript·数据结构