为了账号安全,请及时绑定邮箱和手机立即绑定

js实现一个倒计时处理问题

js实现一个倒计时处理问题

狐的传说 2019-03-12 17:15:19
实现一个功能:以小时计算,如活动到期时间为'20:30:50',以当前的时间考试计算离到达目标是时间剩余多少‘小时:分:秒’的功能。我的初步代码是:setTime() {    const currentTime = new Date();    const arr = this.props.data.aimTime.split(':');  //输入字符串格式的时间格式,如:'20:30:45'      const aimTime = 3600000 * (parseInt(arr[0])) + 60000 * (parseInt(arr[1])) + 1000 * (parseInt(arr[2]));   //计算目标时间毫秒数    const cuTime = (3600000 * currentTime.getHours()) + (60000 * currentTime.getMinutes()) + (1000 * currentTime.getSeconds());  //当前时间毫秒数    const remainTime = aimTime - cuTime;  //一天内离目标时间剩余毫秒数    const hours = parseInt(arr[0]) - currentTime.getHours();  //剩余小时       const min = parseInt(arr[1]) > 0 ? (60 - currentTime.getMinutes() + parseInt(arr[1]))      : 60 - currentTime.getMinutes();  //剩余分钟,有问题感觉    const second = parseInt(arr[2]) > 0 ? (60 - currentTime.getSeconds() + parseInt(arr[2]))      : 60 - currentTime.getSeconds();   //剩余秒,有问题感觉        remainTime > 0 &&      this.setState({        hours: hours > 9 ? hours : '0' + hours,        min: min > 9 ? min : '0' + min,        second: second > 9 ? second : '0' + second,      });  }这样写分钟和秒数不正确,该如何更正,或者有什么更好的方式实现这一功能
查看完整描述

6 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

举个栗子:当前时间09:01:01, 目标时间10:59:59 

按照你的计算方法,剩余秒数和分钟数是会超过60的。但是超过60,在数学上应该进位的,你少了进位操作。


再举个栗子,十进制里面,计算减法计算,是 个、十、百分开计算的么?


附上自己的代码:


const hours = parseInt(remainTime / 3600 / 1000);   // 剩余小时

const min = parseInt((remainTime - (hours*3600*1000)) / 60 / 1000); // 剩余分钟

const second = parseInt((remainTime - (hours*3600*1000) - (min*60*1000)) / 1000);  // 剩余秒


查看完整回答
反对 回复 2019-03-28
?
慕慕森

TA贡献1856条经验 获得超17个赞

function formatTime(t){

    t=t.toString();

    return t[1] ? t : '0'+t

}

function countDown(t){

    var maxTime=(new Date(t).getTime())-Date.now();

    if(maxTime>0){

        var h=parseInt(maxTime/(60*60*1000));

        var m=parseInt(maxTime/(60*1000)%60);

        var s=parseInt(maxTime/(1000)%60);

        var time=[h,m,s].map((el)=>formatTime(el)).join(':');

        console.log(time)

        setTimeout(countDown,1000,t);

    }else{

        console.log('timeout')

    }

}

countDown('2018-04-17 18:00:00');


查看完整回答
反对 回复 2019-03-28
  • 6 回答
  • 0 关注
  • 489 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号