• 设置一天中不同时段的倒计时,计算时针和分针的夹角


    需求:获得一天5个不同阶段的倒计时,为期10天。

    计数时段分比为:

    第一时段9:00-11:59、第二时段12:00-17:59、第三时段18:00-20:59、第四时段21:00-23:59、第五时段次日0:00-8:59,共五个时段。

    简单的写了如下:见第一部分。

    当然真实肯定不是这样,稍微调整一下,要从服务器获取时间的,不要相信客户端时间,见第二部分。

    DOM:

     <div id="txt"></div>

    JS:

    -----------------------------第一部分--------------------------------------------

    function ShowCountDown() {
        var now = new Date(),
            year = now.getFullYear(),
            month = now.getMonth(),
            day = now.getDate(),
            h = now.getHours(),
            endDate;
        if (h >= 0 && h < 9) {
            endDate = new Date(year, month, day, 8, 59, 59);
        } else if (h >= 9 && h < 12) {
            endDate = new Date(year, month, day, 11, 59, 59);
        } else if (h >= 12 && h < 18) {
            endDate = new Date(year, month, day, 17, 59, 59);
        } else if (h >= 18 && h < 21) {
            endDate = new Date(year, month, day, 20, 59, 59);
        } else {
            endDate = new Date(year, month, day, 23, 59, 59);
        }
        var leftsecond = parseInt((endDate.getTime() - now.getTime()) / 1000);
        var hour = Math.floor(leftsecond / 3600);
        var minute = Math.floor((leftsecond - hour * 3600) / 60);
        var second = Math.floor(leftsecond - hour * 3600 - minute * 60);
    
        document.getElementById('txt').innerHTML = "距离此时段结束还有:" + hour + "小时" + minute + "分" + second + "秒";
        countDowntimer = setTimeout(function() {
            ShowCountDown();
        }, 1000);
    }
    ShowCountDown();

    ----------------------------第二部分-------------------------------

    上面只是简单的测试看看的,真实要熊服务器获取时间,这样才能保证不必要的错误,稍微改写一下

    function ShowCountDown(ele, startTime, endTime) {
            var startTimeArr = startTime.split(":");
            var endTimeArr = endTime.split(":");
            var startH = +startTimeArr[0],
                startM = +startTimeArr[1],
                startS = +startTimeArr[2],
                startDate = new Date(2017, 03, 10, startH, startM, startS).getTime(),
                endH = +endTimeArr[0],
                endM = +endTimeArr[1],
                endS = +endTimeArr[2],
                endDate = new Date(2017, 03, 10, endH, endM, endS).getTime(),
                leftsecond = (endDate - startDate) / 1000;
            var st = setInterval(function() {
                leftsecond -= 1;
                if (leftsecond == 0) { clearInterval(st); }
                getEndTime(leftsecond,ele);
            }, 1000);
    
        }
    function getEndTime(arg, ele) { hour = Math.floor(arg / 3600), minute = Math.floor((arg - hour * 3600) / 60), second = Math.floor(arg - hour * 3600 - minute * 60); document.getElementById(ele).innerHTML = hour + "小时" + minute + "分" + second + "秒"; }
    //参数一:dom元素; 参数二:用户访问页面服务器传回的时间; 参数三:服务器设置的各阶段截止时间。
    // 如:startTime = '10:23:45'; endTime = '11:59:59' ShowCountDown('countdown', startTime, endTime);

     3 、-------------------------------------------还没结束----------------------

    加入用户是在某个倒计时结束的临界点左右停留呢?没有再次请求服务器,无法获取下个时段的倒计时结束时间,但是,上个阶段的倒计时已经结束,页面就是00:00:00了。

    其实可以这么做:

    第一种:在一个阶段的倒计时结束后马上发起ajax请求,获得下个时段的时间段

    第二中:直接在零界点之后再次刷新页面,如果不考虑用户是否care的话,可以这么做。。。。。

    如果想获取毫秒级的倒计时?

    ;(function(){
      function leftTime(){
        var endTime = new Date("2017/5/20,12:00:00");//结束时间
        var curTime = new Date();
        var leftTime = parseInt((endTime.getTime() - curTime.getTime())/1000);
        var d = parseInt(leftTime/(60*60*24));
        var h = parseInt(leftTime/(60*60)%24);
        var m = parseInt(leftTime/60%60);
        var s = parseInt(leftTime%60);
        var ms = parseInt(((endTime.getTime() - curTime.getTime())/100)%10);
        var txt = "剩余:"+d+"天"+h+"小时"+m+"分钟"+s+"."+ms+"秒";
        console.log(txt);
      };
      leftTime();
      var set = setInterval(leftTime,100);
    })();
    

      

     4、说道时间,让我想起了中学时代如何计算时针和分针的夹角;

    /**
     * [getAngleoff 时针每走过一分钟对应的角度是360/(12*60)=0.5°;分针没走过1分走过360/60=6°;]
     * @param  {[type]} hour   [时]
     * @param  {[type]} minute [分]
     * @return {[type]}        [角度]
     */
    function getAngleoff(hour,minute){
    	var hourAngle = hour*30+minute*0.5,
    	    minuteAngle = minute*6,
    	    angngle = Math.abs(hourAngle-minuteAngle);
    	return hour+":"+minute+'时针和分针的夹角是:'+ angngle +'°';
    }
    getAngleoff(7,55)
    //"7:55时针和分针的夹角是:92.5°"
    

      

  • 相关阅读:
    g++ 链接静态库命令应该放在最后
    Yahoo 股票数据抓取
    Android使用tcpdump抓包
    警惕rapidxml的陷阱(二):在Android上默认内存池分配数组过大,容易导致栈溢出
    警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期
    union中的成员不能有构造函数
    嵌入式设备上运行AllJoyn注意事项
    alljoyn连接时-fno-rtti选项测试结果
    AllJoyn Bundled Daemon 使用方式研究
    linux连接静态库
  • 原文地址:https://www.cnblogs.com/leaf930814/p/6534313.html
Copyright © 2020-2023  润新知