JS调用函数每5分钟计算一次服务器时间

时间:2014-02-02 12:21:17

标签: javascript date

我需要每隔5分钟调用一些JS函数,但不是在页面加载后每隔5分钟调用一次,而是每隔5分钟服务器时间调用一次。即服务器时钟达到5,10,15等时。

我写了下一段代码,但我不知道如何在当前服务器时间< %5分钟(例如03:13:28)..

我第一次在页面加载时调用函数,但下次必须在服务器时间事件上调用它。

Dig = new Date(parseInt(new Date().getTime()/1000)*1000);
var min = Dig.getMinutes();
var sec = Dig.getSeconds();
if(min%5==0){
  var to = ((300-sec)*1000);
}else{
  // HERE MY PROBLEM
}
setTimeout(function(){
  myFunction();
  setInterval(function(){
    // do something every 5 mins on server time
    myFunction();
  }, 300000);
}, to);

现在我按// <问题

进行操作
    var os = 0;
    if(min<4){
        os = 4-min;
    }else if(min<9){
        os = 9-min;
    }else if(min<14){
        os = 14-min;
    }else if(min<19){
        os = 19-min;
    }else if(min<24){
        os = 24-min;
    }else if(min<29){
        os = 29-min;
    }else if(min<34){
        os = 34-min;
    }else if(min<39){
        os = 35-min;
    }else if(min<44){
        os = 44-min;
    }else if(min<49){
        os = 49-min;
    }else if(min<54){
        os = 54-min;
    }else if(min<59){
        os = 59-min;
    }
    sec = 60-sec;
    os = ((os*60)+sec);
    var to = (os*1000);

但我需要最短的变体。

3 个答案:

答案 0 :(得分:1)

如果你的目标是找出从“现在”到下一个五分钟标记的毫秒数,这里是你如何做到的:

var fiveMinutes = 5 * 60 * 1000;
var now = new Date().getTime();
var untilNextFiveMinuteMark = fiveMinutes - (now % fiveMinutes);
console.log("now is " + new Date(now));
console.log("time to next five-minute mark: " + untilNextFiveMinuteMark + "ms");
console.log("next five minute mark: " + new Date(now + untilNextFiveMinuteMark));

Live Example | Live Source

例如,对我来说(我在英国),它说:

now is Sun Feb 02 2014 13:47:36 GMT+0000 (GMT)
time to next five-minute mark: 143169ms
next five minute mark: Sun Feb 02 2014 13:50:00 GMT+0000 (GMT)

在您的问题中,您不止一次谈论“服务器时间”,但您的代码中没有任何内容与服务器上的时间相关。这都是在客户端上使用的时间。要在服务器上获得时间,您必须让服务器将该信息发送给客户端然后使用它(即使这样,当然也会出现不准确,因为客户端需要不确定的时间来检索时间值从服务器;在正常使用中,那个时间会很小。)

答案 1 :(得分:-1)

您可以按服务器端语言

显示页面上的时间戳
<script>
var serverTimeStamp = <?php echo (1000*time());?>; 
</script>

,您将在此特定页面上拥有实际的服务器时间值。

你也可以对服务器进行ajax调用,这将返回实际的服务器时间, 并在时机成熟时执行客户端站点javascript操作。

答案 2 :(得分:-1)

  

在服务器时间每隔5分钟呼叫

我在服务器时间和客户机时间上每隔5分钟就看不出重大差异。

  

每隔5分钟,每隔5分钟。

无需计算5分钟差距,只需设置间隔window.setInterval()

即可

示例代码:

var counter = 0;
CallEvery5Minutes();

var interval = window.setInterval(function () {
    CallEvery5Minutes();
}, 5000);  //5000 is 5 Seconds

function CallEvery5Minutes() {
    console.log("5 Minutes Completed!!! = '" + counter + "'");
    if (counter == 5) {
        clearInterval(interval);
        console.log("Interval has been cleared!!!");
    }

    counter += 1;
}

此处50005 Seconds

参考 LIVE DEMO