仅当日期小于另一个时才运行函数

Posted

技术标签:

【中文标题】仅当日期小于另一个时才运行函数【英文标题】:Only run function if date is less than the other 【发布时间】:2015-08-08 07:52:53 【问题描述】:

我已经建立了一个计数器来计算(向上和向下)日期。我只想让计数器功能停止运行,并且一旦它达到当前日期或更晚就完全停止运行。现在它会提醒说日期已到,但即使已到日期也会继续计数。

这是柜台的JSFiddle。

这是布尔值

  if(tDate == eDate) 
    alert('Today is the event!');
    return false;
    // clearTimeout( countDown.prototype.update() );
   else 
    counter();
  

这是整个代码

$(document).ready(function() 
  var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  var d = new Date();
  var month = monthNames[d.getMonth()];
  var day = d.getUTCDate();
  var year = d.getUTCFullYear();

  var eMonth = $("#d-month").html();
  var eDay = $("#d-day").html();
  var eYear = $("#d-year").html();

  var tDate = month + " " + day + " " + year;
  var eDate = eMonth + " " + eDay + " " + eYear;

  alert("today's date: " + tDate + " event's date: " + eDate);

  if(tDate == eDate) 
    alert('Today is the event!');
    return false;
    // clearTimeout( countDown.prototype.update() );
   else 
    counter();
  

  function counter() 
    function countDown(initDate, id) 
      this.counterDate = new Date(initDate);
      this.update();
    
    countDown.prototype.calculateUnit=function(secDiff, unitSeconds)
      var tmp = Math.abs((tmp = secDiff/unitSeconds)) < 1? 0 : tmp;
      return Math.abs(tmp < 0 ? Math.ceil(tmp) : Math.floor(tmp));
    
    countDown.prototype.calculate=function()
      var secDiff = Math.abs(Math.round(((new Date()) - this.counterDate)/1000));
      this.days = this.calculateUnit(secDiff,86400);
      this.hours = this.calculateUnit((secDiff-(this.days*86400)),3600);
      this.mins = this.calculateUnit((secDiff-(this.days*86400)-(this.hours*3600)),60);
      this.secs = this.calculateUnit((secDiff-(this.days*86400)-(this.hours*3600)-(this.mins*60)),1);
    
    countDown.prototype.update=function() 
      this.calculate();
      $("#countdown-day").html(this.days + (this.days == 1));
      $("#countdown-hour").html(this.hours + (this.hours == 1));
      $("#countdown-min").html(this.mins + (this.mins == 1));
      $("#countdown-sec").html(this.secs + (this.secs == 1));
      var self = this;
      setTimeout(function()self.update();, (1000));
    
    function counterInit()  
      var month = $("#d-month").html();
      var day = $("#d-day").html();
      var year = $("#d-year").html();
      var time = $("#d-time").html();
      new countDown( month + day + "," + year + time);
      // new countDown('May 9, 2015, 00:00:00', 'counter'); 
    
    counterInit();
  
);

【问题讨论】:

【参考方案1】:

我试过你的小提琴,我可以告诉你每个字符串的末尾都有一些空格,这使得它们彼此不同。

所以如果你只是添加这些行它会工作

tDate = jQuery.trim(tDate);
eDate = jQuery.trim(eDate);

这是你的小提琴更新 http://jsfiddle.net/c5qkm5gL/

编辑:

我忘了说我把 '.html()' 改成了 '.text()',这样你得到的是纯文本而不是 html 内容。

作为建议,调试时使用 console.log 而不是警报。

【讨论】:

这是条件问题。由于您只是在验证这些日期是否相等(将它们作为字符串进行比较),因此在任何其他情况下它将运行计数器。我不理解整个代码,因此您只需将这些字符串格式化为日期并比较它们以查看事件是否已通过并停止计数器。检查此链接以查看如何比较它们***.com/questions/11170054/…

以上是关于仅当日期小于另一个时才运行函数的主要内容,如果未能解决你的问题,请参考以下文章

仅当 n 个线程(包括其自身)正在运行时才停止线程

仅当低于 100 时才增加列值

仅当 src 发生更改时才运行构建

仅当 pr 目标为 master 时才运行 GitHub 操作

仅当两个依赖项都更改时才运行效果挂钩

仅当页面的某个部分发生更改时才运行角度编译