【问题标题】:Execute a function on specific time frame javascript在特定时间框架 javascript 上执行函数
【发布时间】:2014-04-23 11:35:16
【问题描述】:

您好,我想在 8 点到 10 点之间执行此功能。所以它从 8 点开始,自动在 10 点停止。我在下面有这段代码,但它似乎确实有效,如果超过 8 点,它将不会执行。

   var timeOut1 = setTimeout(function () {
        var date = new Date();
        if ((date.getHours() >= 20 && date.getMinutes() >= 00) || (date.getHours() <= 22 && date.getMinutes() <= 00)) {
        $('#myModal').modal('show');        
        } 
    }, 1000);
   document.write(timeOut1);

我也试过 setInterval 有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript jquery datetime


    【解决方案1】:

    这里需要使用 setInterval() 方法:

    var timeOut1 = setInterval(function () {
    

    由于 setTimeout 将在 1000 毫秒(即 1 秒)后运行,因此它不会再次检查您的时间,但使用 setInterval 将每 1 秒运行一次并检查时间并执行代码。

    var timeOut1 = setInterval(function () {
            var date = new Date();
            if ((date.getHours() >= 20 && date.getMinutes() >= 00) || (date.getHours() <= 22 && date.getMinutes() <= 00)) {
            $('#myModal').modal('show');        
            } 
        }, 1000);
       document.write(timeOut1);
    

    评论回复:

    如果需要,您可以清除间隔计时器,例如。关闭modal后不需要使用setInterval函数,所以关闭modal时使用如下代码:

    clearInterval(timeOut1);
    

    【讨论】:

    • 是的,时间还可以,但是一旦关闭,它就会一直出现。我如何才能关闭模式而不重新出现?它应该只在刷新网站时出现
    【解决方案2】:

    这将帮助您在上午 10 点调用函数

    var now = new Date();
    var millisTill10 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0) - now;
    if (millisTill10 < 0) {
         millisTill10 += 86400000; // it's after 10am, try 10am tomorrow.
    }
    setTimeout(function(){alert("It's 10am!")}, millisTill10);
    

    参考:Call a javascript function at a specific time of day

    【讨论】:

      【解决方案3】:

      正如现在所写的那样,您的函数将在定义 timeOut1 后 1000 毫秒执行,并且它只会执行一次,如果 if 条件评估为 false,则不会发生任何事情。如果您希望该函数重复检查您必须使用 setInterval 的时间。一旦条件评估为真,要让间隔停止重复,您还必须清除间隔。

      var intervalHandle = setInterval(function () {
          var date = new Date();
          if ((date.getHours() >= 20 && date.getMinutes() >= 00) || (date.getHours() <= 22 && date.getMinutes() <= 00)) {
            $('#myModal').modal('show');
            clearInterval(intervalHandle);          
          } 
      }, 1000);
      

      【讨论】:

      • 这似乎停止了时间间隔,但是当我刷新页面时它不会重新出现。我如何让它在每次刷新后出现。
      • 浏览器刷新应该会导致重新评估代码并再次设置间隔。如果条件仍然评估为真(在这种情况下意味着它至少为 20.00 且小于 22.01),则模态应该再次显示。在var date = ... 上方的行中添加console.log("Checking the time"); 然后刷新,您应该会在控制台中看到间隔触发。如果它不起作用,我的猜测是您的条件评估为 false 或者您的 jquery-line 抛出异常。看看你的控制台。
      【解决方案4】:

      您应该在此处使用&amp;&amp; 而不是|| 才能使其正常工作。每当时间为 8 且小于 10 时显示模态。希望我不会迟到:)

       var timeOut1 = setInterval(function () {
                  var date = new Date();
                  if ((date.getHours() >= 20 && date.getMinutes() >= 00) && (date.getHours() <= 22 && date.getMinutes() <= 00)) {
                  $('#myModal').modal('show');        
                  } 
              }, 1000);    document.write(timeOut1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多