jQuery根据设置日期显示和/或隐藏元素

时间:2017-10-02 16:55:05

标签: javascript jquery html setinterval

我正在尝试显示一个名为' oecard'当达到保存的开始时间,然后在达到保存的结束时间后隐藏它。

var db_st = item.DB_ST; // saved in db as '2017-10-02 12:20:00 PM'
var db_et = item.DB_ET; // saved in db as '2017-10-02 12:25:00 PM'

var cd_start = new Date(db_st).getTime(); // converts db date to milliseconds
var cd_end = new Date(db_et).getTime(); // converts db date to milliseconds

var currentdate = $.now();

var loop = setInterval(function(){
  if(currentdate >= cd_start && currentdate <= cd_end) 
  {
    $('#oecard').show();
  }
  else
  {
    $('#oecard').hide();
  }
},1);

我尝试上面的代码无济于事。该按钮不会出现在保存的时间上,但是当我刷新页面时,它会出现。结束时间也是如此。

我知道这必须是某种逻辑错误。我需要动态地执行此操作,而无需刷新页面。

3 个答案:

答案 0 :(得分:3)

您需要将currentdate放入循环中:

var loop = setInterval(function(){
  var currentdate = $.now();

  if(currentdate >= cd_start && currentdate <= cd_end) 
  {
    $('#oecard').show();
  }
  else
  {
    $('#oecard').hide();
  }
},1);

$ .now()返回的值不是动态的,它不会为您更新,每次调用setInterval回调时都需要调用它。

答案 1 :(得分:0)

请使用Date.parse来比较日期。例如

Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10')
//true

使用custom events在没有刷新的情况下聆听时间。

答案 2 :(得分:0)

您可以使用.toggle()重写几行代码,如:

setInterval(function(){
   $('#oecard').toggle($.now() >= cd_start && $.now() <= cd_end);
}, 1);