如何在16:00

时间:2015-10-16 11:43:46

标签: javascript php timer counter countdown

我正在为我的网站倒计时。我们在每天16:00之前提供当天发货。我需要一个计数器,每天16:00倒计时。 最后,我将修改代码,使其在周末根本不显示,但就目前而言,我所需要的只是每天都可以倒计时的东西。 16:00后消失,从00:00开始新鲜倒计时

以下是我到目前为止的代码。

<?php
if (new DateTime() < new DateTime("16:00:00")) {

?>
<script type="text/javascript">

    var CDown = function() {
        this.state=0;// if initialized
        this.counts=[];// array holding countdown date objects and id to print to {d:new Date(2013,11,18,18,54,36), id:"countbox1"}
        this.interval=null;// setInterval object
    }

    CDown.prototype = {
        init: function(){
            this.state=1;
            var self=this;
            this.interval=window.setInterval(function(){self.tick();}, 1000);
        },
        add: function(date,id){
            this.counts.push({d:date,id:id});
            this.tick();
            if(this.state==0) this.init();
        },
        expire: function(idxs){
            for(var x in idxs) {
            this.display(this.counts[idxs[x]], "Now!");
            this.counts.splice(idxs[x], 1);
        }
    },
    format: function(r){
        var out="";
        if(r.d != 0){out += r.d +" "+((r.d==1)?"day":"days")+", ";}
        if(r.h != 0){out += r.h +" "+((r.h==1)?"hour":"hours")+", ";}
        out += r.m +" "+((r.m==1)?"min":"mins")+", ";
        out += r.s +" "+((r.s==1)?"sec":"secs")+", ";

        return out.substr(0,out.length-2);
    },
    math: function(work){
        var y=w=d=h=m=s=ms=0;

        ms=(""+((work%1000)+1000)).substr(1,3);
        work=Math.floor(work/1000);//kill the "milliseconds" so just secs

        y=Math.floor(work/31536000);//years (no leapyear support)
        w=Math.floor(work/604800);//weeks
        d=Math.floor(work/86400);//days
        work=work%86400;

        h=Math.floor(work/3600);//hours
        work=work%3600;

        m=Math.floor(work/60);//minutes
        work=work%60;

        s=Math.floor(work);//seconds

        return {y:y,w:w,d:d,h:h,m:m,s:s,ms:ms};
    },
    tick: function(){
        var now=(new Date()).getTime(),
        expired=[],cnt=0,amount=0;

        if(this.counts)
            for(var idx=0,n=this.counts.length; idx<n; ++idx){
                cnt=this.counts[idx];
                amount=cnt.d.getTime()-now;//calc milliseconds between dates

                // if time is already past
                if(amount<0){
                    expired.push(idx);
                }
                // date is still good
                else{
                    this.display(cnt, this.format(this.math(amount)));
                }
            }

            // deal with any expired
            if(expired.length>0) this.expire(expired);

            // if no active counts, stop updating
            if(this.counts.length==0) window.clearTimeout(this.interval);

        },
        display: function(cnt,msg){
            document.getElementById(cnt.id).innerHTML=msg;
        }
   };

   window.onload=function(){
      var cdown = new CDown();

      cdown.add(new Date(2015,9,16,16,00,00), "countbox1");
   };
 </script>
 <span style="font-size:30px;"><div id="countbox1"></div></span>
 <?php } ?>

2 个答案:

答案 0 :(得分:0)

这里的概念测试 将变量countDownTo更改为第8,103和109行的当前小时 更改第133行的变量分钟

&#13;
&#13;
<?php if (new DateTime() < new DateTime( "16:00:00")) { ?>
<script type="text/javascript">
  var check = 0;
  /*set the countdown hour*/
  var countDownTo = 16;
  var CDown = function() {
    this.state = 0; // if initialized
    this.counts = []; // array holding countdown date objects and id to print to {d:new Date(2013,11,18,18,54,36), id:"countbox1"}
    this.interval = null; // setInterval object
  }

  CDown.prototype = {
    init: function() {
      this.state = 1;
      var self = this;
      this.interval = window.setInterval(function() {
        self.tick();
      }, 1000);
    },
    add: function(date, id) {
      this.counts.push({
        d: date,
        id: id
      });
      this.tick();
      if (this.state == 0) this.init();
    },
    expire: function(idxs) {
      for (var x in idxs) {
        this.display(this.counts[idxs[x]], "Now!");
        this.counts.splice(idxs[x], 1);
      }

    },
    format: function(r) {
      var out = "";
      if (r.d != 0) {
        out += r.d + " " + ((r.d == 1) ? "day" : "days") + ", ";
      }
      if (r.h != 0) {
        out += r.h + " " + ((r.h == 1) ? "hour" : "hours") + ", ";
      }
      out += r.m + " " + ((r.m == 1) ? "min" : "mins") + ", ";
      out += r.s + " " + ((r.s == 1) ? "sec" : "secs") + ", ";

      return out.substr(0, out.length - 2);
    },
    math: function(work) {
      var y = w = d = h = m = s = ms = 0;

      ms = ("" + ((work % 1000) + 1000)).substr(1, 3);
      work = Math.floor(work / 1000); //kill the "milliseconds" so just secs

      y = Math.floor(work / 31536000); //years (no leapyear support)
      w = Math.floor(work / 604800); //weeks
      d = Math.floor(work / 86400); //days
      work = work % 86400;

      h = Math.floor(work / 3600); //hours
      work = work % 3600;

      m = Math.floor(work / 60); //minutes
      work = work % 60;

      s = Math.floor(work); //seconds



      return {
        y: y,
        w: w,
        d: d,
        h: h,
        m: m,
        s: s,
        ms: ms
      };
    },
    tick: function() {
      var now = (new Date()).getTime(),
        expired = [],
        cnt = 0,
        amount = 0;

      if (this.counts)
        for (var idx = 0, n = this.counts.length; idx < n; ++idx) {
          cnt = this.counts[idx];
          amount = cnt.d.getTime() - now; //calc milliseconds between dates

          // if time is already past
          if (amount < 0) {
            expired.push(idx);
          }
          // date is still good
          else {
            this.display(cnt, this.format(this.math(amount)));
          }
        }

      // deal with any expired
      if (expired.length > 0) this.expire(expired);

      // if no active counts, stop updating
      if (this.counts.length == 0) window.clearTimeout(this.interval);

    },
    display: function(cnt, msg) {
      if (msg == `Now!`) {
        check = 1;
        msg = ``;
        var cdown = new CDown();
        var currentdate = new Date();
        var year = currentdate.getFullYear();
        var month = currentdate.getMonth();
        var day = currentdate.getDate() + 1;
        var currenthour = currentdate.getHours();
        /*perform check here*/
        if (countDownTo == 16) {
          countDownTo = 0;
        } else {
          countDownTo = 16;
        }
        var hour = countDownTo;
        var minute = 0;
        var second = 0;
        cdown.add(new Date(year, month, day, hour, minute, second), "countbox1");
      } else {
        check = 0;
      }
      if (countDownTo == 0) msg = ``;
      document.getElementById(cnt.id).innerHTML = msg;


    }
  };

  window.onload = function() {
    var cdown = new CDown();
    var currentdate = new Date();
    var year = currentdate.getFullYear();
    var month = currentdate.getMonth();
    var day = currentdate.getDate();
    var hour = countDownTo;
    var minute = 0;
    var second = 0;
    cdown.add(new Date(year, month, day, hour, minute, second), "countbox1");
  };
</script>
<span style="font-size:30px;"><div id="countbox1"></div></span>
<?php } ?>
&#13;
&#13;
&#13;

答案 1 :(得分:-2)

您可以使用cron job,每24小时重置一次变量。