文件名:downTime.vue
<template> <div class="countDownClass"> <!-- <span>{{countDownText}}</span>--> <img style="height: 5vw" src="@/assets/imgs/icon/time_icon.png" /> <span> <span>{{hhssmm.hou?hhssmm.hou:0}}</span> <span>时</span> <span>{{hhssmm.min?hhssmm.min:0}}</span> <span>分</span> <span>{{hhssmm.sec?hhssmm.sec:0}}秒</span> </span> </div> </template> <script> import moment from 'moment' export default { name: "CountDown", props: { startTime: { type: [Number, String], required: true, }, endTime: { type: [Number, String], required: true, } }, data() { return { countDownText: '', hhssmm:{}, } }, computed: { }, async created() { this.updateState(); this.timeInterval=setInterval(()=>{ this.updateState() },1000) }, updated(){ if(this.end||this.done){ clearInterval(this.timeInterval) } }, methods: { /** * 时间小于10补零 * */ timeFormat(param) { return param < 10 ? "0" + param : param; }, /** * 时间格式化HHmmss * */ formateHHmmss(time){ let day = parseInt(time /1000 / (60 * 60 * 24)); let hou = parseInt((time /1000 % (60 * 60 * 24)) / 3600) + day * 24; let min = parseInt(((time /1000 % (60 * 60 * 24)) % 3600) / 60); let sec = parseInt(((time /1000 % (60 * 60 * 24)) % 3600) % 60); let HHmmss = { hou: this.timeFormat(hou), min: this.timeFormat(min), sec: this.timeFormat(sec) }; return HHmmss; }, /** * 更新倒计时状态 */ updateState() { console.log(this.startTime); let starTime = new Date(moment(this.startTime).format("YYYY/MM/DD HH:mm:ss")).getTime(); console.log(moment(this.startTime).format("YYYY/MM/DD HH:mm:ss")) let endTime = new Date(moment(this.endTime).format("YYYY/MM/DD HH:mm:ss")).getTime(); var test = new Date(endTime); //console.log(test.getFullYear() + "-" + this.timeFormat(test.getMonth()) + "-" + this.timeFormat(test.getDate()) + " " + this.timeFormat(test.getHours()) + ":" + this.timeFormat(test.getMinutes()) + ":" + this.timeFormat(test.getSeconds())) let nowTime = new Date().getTime(); let beginTime = starTime - nowTime; let finishTime = endTime - nowTime; let hhmmss = null; if (beginTime >= 0) { let hou = this.formateHHmmss(beginTime).hou; let min = this.formateHHmmss(beginTime).min; let sec = this.formateHHmmss(beginTime).sec; hhmmss = { hou: hou, min: min, sec: sec }; this.hhssmm = hhmmss; this.start=true; this.countDownText="秒杀已开始"; } else if (finishTime >= 0) { let hou = this.formateHHmmss(finishTime).hou; let min = this.formateHHmmss(finishTime).min; let sec = this.formateHHmmss(finishTime).sec; hhmmss = { hou: hou, min: min, sec: sec }; this.hhssmm = hhmmss; this.countDownText=`距离活动结束`; } else { hhmmss = { hou: "00", min: "00", sec: "00" }; this.end=true; this.countDownText="活动已结束"; } } }, beforeDestroy() { clearInterval(this.timeInterval) } } </script> <style scoped> /* 秒杀 */ .countDownClass { display: flex; align-items: center; flex-direction: row; margin: 0 0 0.1rem 0; color: #999999; font-size: 4vw; } .countDownClass > span:last-child { margin-left: 0.1rem; } .countDownClass > span:last-child span:nth-child(odd) { color: #999999; display: inline-block; border-radius: 0.1rem; padding: 0.05rem 0.05rem 0.05rem 0.05rem; } </style>
调用:
import downTime from '@/components/downTime' export default { components: {downTime }, } <downTime :startTime="'2012-11-11 11:11:11'" :endTime="'2022-11-11 11:11:11'"></downTime>