js 计算倒计时

第一个是我自己写的

// t等于时间戳差  
  function changeTime(t) {
      let timeStr = ''
      let tmp = t/(24* 3600 * 1000)
      if (tmp > 1) timeStr = parseInt(tmp) + '天'

      if (tmp) {
        tmp = tmp.toString().split('.')[1]

        tmp = parseInt(tmp)
        tmp = t/(3600 * 1000)

        if (tmp>1) timeStr += parseInt(tmp) + '小时'
        tmp = tmp.toString().split('.')[1]

        tmp = parseInt(tmp)
        tmp = tmp/(1000 * 60)
        if (tmp>1) timeStr += parseInt(tmp) + '分钟'

        tmp = parseInt(tmp)
        tmp = tmp/1000
        if (tmp>1) timeStr += parseInt(tmp) + '秒'

      }
      return timeStr
    }

  计算结果不对, 因为余数取值错误 7÷3 = 2 ······1,如果用以上方法取余数,此时7÷3 = 2······33333,显然是不对的
正确的方法后面补充。。。

function getDjsTime (timestamp) {
  let t = timestamp - new Date().getTime()
  if (t<0) {
    return false
  }
  // 得到天数
  let days = parseInt(t / 1000 / 60 / 60 / 24)
  // 得到小时
  let hours = parseInt(t / 1000 / 60 / 60 % 24)
  // 得到分钟
  let minutes = parseInt(t / 1000 / 60 % 60)
  // 得到秒
  let seconds = parseInt(t / 1000 % 60)

  let timeStr = days + '天'
  timeStr += hours + '小时'
  timeStr += minutes + '分钟'
  timeStr += seconds + '秒'

  return timeStr
}
let d = '2020-10-1'
djsTimeValue = getDjsTime()
let inter = setInterval(_ => {
          let text = djsTime(d)
          if (text) {
            djsTimeValue = text
          } else {
            djsTimeValue = '超出投资时间'
            clearInterval(inter)
          }
        }, 1000)
    

  也可以写成setTimeout 方式

function djsTime (timestamp) {
  let t = timestamp - new Date().getTime()
  if (t<0) {
    djsTimeValue = '投资时间结束'
  }
  // 得到天数
  let days = parseInt(t / 1000 / 60 / 60 / 24)
  // 得到小时
  let hours = parseInt(t / 1000 / 60 / 60 % 24)
  // 得到分钟
  let minutes = parseInt(t / 1000 / 60 % 60)
  // 得到秒
  let seconds = parseInt(t / 1000 % 60)

  let timeStr = days + ''
  timeStr += hours + '小时'
  timeStr += minutes + '分钟'
  timeStr += seconds + ''

  djsTimeValue = timeStr // 设置时间
  setTimeout(_ => {
     djsTime(timestamp)
  }, 1000)
}
djsTime (‘2020-10-1’) 直接调用即可

 还有一种维持djs函数独立的写法,我喜欢这种

function djsTime (timestamp) {
  let t = timestamp - new Date().getTime()
  if (t<0) {
    return false
  }
  // 得到天数
  let days = parseInt(t / 1000 / 60 / 60 / 24)
  // 得到小时
  let hours = parseInt(t / 1000 / 60 / 60 % 24)
  // 得到分钟
  let minutes = parseInt(t / 1000 / 60 % 60)
  // 得到秒
  let seconds = parseInt(t / 1000 % 60)

  let timeStr = days + '天'
  timeStr += hours + '小时'
  timeStr += minutes + '分钟'
  timeStr += seconds + '秒'

  return timeStr
}

function test() {
      let timeStr = djsTimeFun()
      if (!timeStr) {
        djsTimeValue = timeStr // 设置时间
      } else {
        djsTimeValue = '超出投资时间' // 设置时间
      }
      setTimeout(_ => {
        test(timestamp)
      }, 1000)
}
test()

  

原文地址:https://www.cnblogs.com/zph666/p/8875126.html