求到每周二的一个倒计时代码

从8月1号开始到12月31号结束,
求当前时间到每个周二早上9点钟的一个倒计时

阅读 4.8k
2 个回答
<!docType html>
<html>
    <head>
        <meta charset="utf-8">
        <title>ceshi</title>
        <script src="js/jquery-1.11.3.min.js"></script>
    </head>
    <body>
        <div class="content"></div>
        <script>
            $(function(){
                $.ajax({
                    url:'/topic/product.htm',
                    data:{},
                    type:'post',
                    dataType:'json',
                    success:function(data){
                        var nowTime = Date.parse(new Date());//获取服务器时间
                        var time = new Date(nowTime);

                        var week = time.getDay(); //获取星期几
                        var year = time.getFullYear(); //获取年份
                        var day = time.getDate(); //获取几号
                        var month = time.getMonth()+1; //获取月份
                        
                        var fullday=0;//定义一个月多少天
                        
                        //判断是否是闰年
                        if(!(year%4)){//可以整除,是闰年
                            //判断月份是30天还是31天
                            if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
                                fullday = 31;
                            }else if(month==2){
                                fullday = 29;
                            }else{
                                fullday = 30;
                            }   
                        }else{//不可以整除,不是闰年
                            //判断月份是30天还是31天
                            if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
                                fullday = 31;
                            }else if(month==2){
                                fullday = 28;
                            }else{
                                fullday = 30;
                            }   
                        }
                        
                        //根据今天周几来判断距离下一次周二还有几天
                        var distance_day = 0;
                        switch(week){
                            case 1:
                                distance_day = 1;
                                break;
                            case 2:
                                distance_day = 7;
                                break;
                            case 3:
                                distance_day = 6;
                                break;
                            case 4:
                                distance_day = 5;
                                break;
                            case 5:
                                distance_day = 4;
                                break;
                            case 6:
                                distance_day = 3;
                                break;
                             case 0:
                                distance_day = 2;
                                break;
                        }
                        
                        //计算下一个周二的年月日
                        var end_time = '';
                        if(day+distance_day>fullday){
                            var next_distance = Math.abs(fullday-(day+distance_day)); //计算超过本月下周二是下个月的几号
                            end_time = year+'/'+(month+1)+'/'+next_distance+' 09:00:00';
                        }else{
                            end_time = year+'/'+month+'/'+(day+distance_day)+' 09:00:00';
                        }
                        
                        //倒计时
                        var endtime_sjc = Date.parse(end_time); //计算时间戳
                        var time_distance = (endtime_sjc - nowTime)/1000; //计算现在到结束时间的时间戳

                        function countTime(time_distance){
                            time_distance--;
                            if(time_distance>0){
                                var getDay = Math.floor(time_distance/(60*60*24));//天
                                var getHour = Math.floor((time_distance - getDay*60*60*24)/(60*60));//小时
                                var getMinute = Math.floor((time_distance - getDay*60*60*24 - getHour*60*60)/60);//分钟
                                var getSecond = Math.floor(time_distance - getDay*60*60*24 - getHour*60*60 - getMinute*60);//秒
                                
                                $('.content').html(getDay+'天'+getHour+'时'+getMinute+'分'+getSecond+'秒');
                                
                            }else{
                                $('.content').html('0天0时0分0秒');
                            }
                            setTimeout(function(){
                                countTime(time_distance);
                            },1000);
                        }
                        countTime(time_distance);
                    },
                    error:function(){}
                });
            });
            
        </script>
    </body>
</html>

其实你这个问题主要就是目标时间与当前时间差的问题。
目标时间你是可以计算出来的,规定一个初始时间,7天为一个循环;而当前时间你可以直接从服务器获取。
下面简单写了一段,你可以试试:

 //目标时间规定
    var newTimer = new Date("2016/08/02 09:00:00");
    newTimer = newTimer.getTime();
    function time() {
        //当前时间获取(可以从服务器获取)
        var nowTimer = new Date();
        nowTimer = nowTimer.getTime();
        //如果当前时间大于目标时间,则加上一周;直到目标时间大于当前时间
        while (newTimer<=nowTimer){
            newTimer = newTimer + 7 * 24 * 60 * 60 * 1000;
        }
        //以下为时间计算显示
        var spanTimer = newTimer - nowTimer;
        if (spanTimer > 0) {
            var day = Math.floor(spanTimer / 86400000);
            spanTimer -= day * 86400000;
            var hour = Math.floor(spanTimer / 3600000);
            spanTimer -= hour * 3600000;
            var minute = Math.floor(spanTimer / 60000);
            spanTimer -= minute * 60000;
            var second = Math.floor(spanTimer / 1000);
            console.log(day + '天' + hour + '时' + minute + '分' + second + '秒')
        }
    }
    //定时器循环
    timer = window.setInterval(function () {
        time();
    }, 1000);

至于你要的到12月31日停止这个问题,做个判断把定时器干掉就ok了!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏