当前时间介于两次

时间:2015-04-25 04:21:43

标签: javascript

我正在寻找一种方法来调整我的当前脚本,每分钟将一个页面加载到div中。我希望它在特定时间等待5分钟,然后再回到每分钟执行一次。这是我到目前为止所拥有的。

var starttime = 10‎:‎30:‎00‎ ‎PM;
var endtime = 10‎:‎35:‎00‎ ‎PM;

var myVar = setInterval(function(){ myTimer() }, 1000);

function myTimer() {
    var d = new Date();
    document.getElementById("currenttime").innerHTML = d.toLocaleTimeString();

    if ( d.toLocaleTimeString() > ‎starttime &&
         d.toLocaleTimeString() < ‎endtime ) {

        setInterval(function() {
        }, 300000);

        $("#ticketload").load("loadlasttenminutesmodified.php");

    } else {
        setInterval(function() {
        }, 60000);

        $("#ticketload").load("loadlasttenminutesmodified.php");
    }
};

感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:1)

var starttime = '10‎:‎30:‎00‎ ‎PM',
    endtime = '10‎:‎35:‎00‎ ‎PM';

var myVar = setInterval(myTimer, 1000);

// Use this function instead of toLocaleTimeString, 
// since inconsistencies may arise with that one, depending on country.
function getTimeFormatted(date) {
    var hours = date.getHours(),
        minutes = date.getMinutes(),
        seconds = date.getSeconds(),
        ampm = hours >= 12 ? 'PM' : 'AM';
    hours = hours % 12;
    hours = hours ? hours : 12;
    minutes = minutes < 10 ? '0' + minutes : minutes;
    seconds = seconds < 10 ? '0' + seconds : seconds;
    return hours + ':' + minutes + ':' + seconds + ' ' + ampm;
}

function myTimer() {
    var d = getTimeFormatted(new Date());
    document.getElementById("currenttime").innerHTML = d;

    // Simply return (exit) the function when current time is 
    // between both of those dates. 
    // Your function will not go further than this.
    // And it will effectively do nothing other than update the innerHTML
    // for about five minutes.
    if (d > ‎starttime && d < ‎endtime) return;

    // Do the stuff that is supposed to run every minute. 
    // I assume this is, but place whatever else you want in here.
    $("#ticketload").load("loadlasttenminutesmodified.php");
}

在执行应该每分钟运行的其余代码之前,您可以在满足时间条件时退出return的时间间隔。

我对您的代码进行了一些更改:

  • 您错过了starttimeendtime变量
  • 中的引号
  • 用新功能替换toLocaleTimeString。感谢@SpiderPig指出为什么toLocaleTimeString不可靠。
  • 您可以直接在myVar间隔中指定函数,而不是在匿名函数中执行myTimer函数。
  • 将当前日期格式化为上午/下午一次,因为只需要这一切。
  • return满足时间条件时以及在间隔内执行其余代码之前。
  • 我不知道那些空的setInterval是什么,所以我删除了它们。我想这只是示例代码,从您给出的变量名称来判断。

答案 1 :(得分:0)

Date.prototype.setMyTime = function (time) {
    arrTime = time.split(":");
    this.setHours(arrTime[0],arrTime[1],arrTime[2]);
    return this;
}

var d = new Date();
var starttime = d.setMyTime('22:30:00');
var endtime = d.setMyTime('22:35:00');
var intervalId, loading = false;
var myVar = setInterval(function(){ myTimer() }, 1000);

function myTimer() {
        var d = new Date();
    document.getElementById("currenttime").innerHTML = d.toLocaleTimeString();
    if(d.getTime() > starttime.getTime() && d.getTime() < endtime.getTime()) {
            clearInterval(intervalId);
            loading = false;
    } else {
        if (loading === false) {
            intervalId = setInterval(function(){ $("#ticketload").load("loadlasttenminutesmodified.php"); }, 60000);
            loading = true;
        }

    }
}

答案 2 :(得分:0)

尝试

  var startTime = "22:30:00",
      endTime = "22:35:00",
      currentTime = $("#currenttime"),
      ticketLoad = $("#ticketload"),
      delay = 60000,
      extendedDelay = delay * 5,
      timeout = null,
      timer = function timer(delay) {

        var cycle = function cycle(delay, reset) {
          // clear `queue` if within `startTime` , `endTime` range,
          // `reset` set to `true`
          if (reset) {
            this.queue("timer", []);
          };
          // `cycle` delay `60000` 
          this.html("currenttime called at:" + new Date().toLocaleString())
          // set `cycle` delay to `300000` 
          // if within `startTime` , `endTime` range,
          // `reset` set to `true`
          var _delay = !reset ? delay : extendedDelay;
          .delay(_delay, "timer")
          .queue("timer", function() {
            console.log(new Date().toLocaleString());
            // continue cycle
            timer.call($(this), _delay);
          }).dequeue("timer");
          // do ajax stuff
          ticketLoad.load("loadlasttenminutesmodified.php")
          .fail(function(jqxhr, textStatus, errorThrown) {
            console.log(errorThrown);
            // clear `queue` on `error`
            currentTime.queue("timer", [])
          });
      };
      // if within `startTime` , `endTime` range
      // clear `queue` , set `cycle` delay to `300000`       
      if (String(new Date()).split(" ")[4] > startTime 
        && String(new Date()).split(" ")[4] < endTime) {
          cycle.call(this, delay, true);
          timeout = setInterval(function() {
            if (String(new Date()).split(" ")[4] >= endTime) {
              clearInterval(timeout);
              timeout = null;
              this.queue("timer", []);
              cycle.call(this, delay)
            }
          }.bind(this), 7500)
      } else {
        if (String(new Date()).split(" ")[4] >= endTime) {
          this.queue("timer", []);
          cycle.call($(this), delay)
        } else {
          cycle.call($(this), delay)
        }
      };
    };

  timer.call(currentTime, delay);

&#13;
&#13;
$(function() {
  var startTime = "22:30:00",
      endTime = "22:35:00",
      currentTime = $("#currenttime"),
      ticketLoad = $("#ticketload"),
      delay = 60000,
      extendedDelay = delay * 5,
      timeout = null,
      timer = function timer(delay, reset) {
        var cycle = function cycle(delay, reset) {

          if (reset) {
            this.queue("timer", [])
          };
                    
          var _delay = !reset ? delay : extendedDelay;
          this.html("currenttime called at:" + new Date().toLocaleString())
          .delay(_delay, "timer")
          .queue("timer", function() {
            console.log(new Date().toLocaleString());
            timer.call($(this), _delay)
          }).dequeue("timer");

          $.when(ticketLoad)
            .always(function(data) {
            this.html("ticketLoad called at:" + new Date().toLocaleString())
          })
        };
        
        if (String(new Date()).split(" ")[4] > startTime 
            && String(new Date()).split(" ")[4] < endTime) {
              cycle.call(this, delay, true);
              timeout = setInterval(function() {
                if (String(new Date()).split(" ")[4] >= endTime) {
                  clearInterval(timeout);
                  timeout = null;
                  this.queue("timer", []);
                  cycle.call(this, delay)
                }
              // check if beyond `endTime` ,
              // reset `cycle`
              // adjust interval duration here
              // for greater, less frequency of checks
              }.bind(this), 7500)
        } else {
          if (String(new Date()).split(" ")[4] >= endTime) {
            this.queue("timer", []);
            cycle.call($(this), delay)
          } else {
            cycle.call($(this), delay)
          }
        };
    };

  timer.call(currentTime, delay)
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="currenttime"></div>
<div id="ticketload"></div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我决定采取不同的方法。将间隔设置为一分钟,并在其中包含if语句。另外,我需要将时间格式转换为与变量相同的格式。

<script type="text/javascript">
starttime = '10:30:00 PM';
endtime = '10:35:00 PM';

var myVar = setInterval(function(){ myTimer() }, 60000);

function myTimer() {
var timenow = new Date();
timeconvert = timenow.toLocaleTimeString()
if (timeconvert > starttime && timeconvert < endtime)
{
//alert("Time is 5 minutes");
}
else
{
//alert("Time is 60 seconds");
$("#ticketload").load("loadlasttenminutesmodified.php");
}
    };
</script>

这一周一直很好。