VUE组件日时分秒倒计时

因为产品说需要取服务器的时间戳,所以nowTime是从服务器取的当前时间戳,没有这个要求可以用new Date().getTime()代替;

组件代码

<template>
  <div class="DayDown">
    <span>{{ dayString }}</span>
    <span>{{ hourString }}</span>
    <span>{{ minuteString }}</span>
    <span>{{ secondString }}</span>
  </div>
</template>
<script>
export default {
  data () {
    return {
      day: '',
      hour: '',
      minute: '',
      second: '',
      promiseTimer: ''
    };
  },
  props: {
    endTime: {
      default: ''
    },
    nowTime: {
      default: ''
    }
  },
  watch: {
    endTime (val, old) {
      if (val !== old) {
        this.DayDown();
      }
    }
  },
  mounted () {
    this.DayDown();
  },
  methods: {
    DayDown () {
      clearInterval(this.promiseTimer);
      this.promiseTimer = setInterval(() => {
        const remainTime = this.endTime - this.nowTime;
        if (remainTime >= 0) {
          this.day = Math.floor(remainTime / (60 * 60 * 24));
          this.hour = Math.floor(remainTime / 60 / 60 % 24);
          this.minute = Math.floor((remainTime % 3600) / 60);
          this.second = Math.floor((remainTime % 3600) % 60);
          this.$emit('subtract');
        } else {
          this.day = 0;
          this.hour = 0;
          this.minute = 0;
          this.second = 0;
          this.$emit('end');
          clearInterval(this.promiseTimer);
        }
      }, 1000);
    },
    formatNum (num) {
      if (num) {
        return num < 10 ? '0' + num : '' + num;
      } else {
        return '00';
      }
    }
  },
  computed: {
    dayString () {
      return this.formatNum(this.day);
    },
    hourString () {
      return this.formatNum(this.hour);
    },
    minuteString () {
      return this.formatNum(this.minute);
    },
    secondString () {
      return this.formatNum(this.second);
    }
  }
};
</script>
<style scoped>
.DayDown span{
  padding: 5px;
  background-color: #000;
  color: #fff;
  border-radius: 4px;
}
</style>

父组件代码

<template>
  <div>
     <<day-down :endTime="info.startTime / 1000" v-if="info.endTime&& nowTime" @end="getSaleDetail" :nowTime="nowTime / 1000" @subtract="subtract"></day-down>
  </div>
</template>

<script>
import DayDown from '../components/DayDown.vue';
export default {
  components: { DayDown },
  data () {
    return {
        nowTime: null,
        info: {}
    };
  },

  mounted () {
  },

  methods: {
      // 传给组件的时间戳是秒
      // getSaleDetail是刷新数据方法
      // 减当前时间戳
      subtract () {
        this.nowTime += 1000;
      },
  }
};
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值