从时间戳开始经过的Javascript时间

时间:2013-03-07 13:43:22

标签: javascript if-statement time

我试图通过将其存储在变量中来“缓存”某些信息 如果2分钟过去了,我想获得“实时”值(调用url)。 如果2分钟没有通过,我想从变量中获取数据。

我基本上想要的是:

if(time passed is less than 2 minutes) {
    get from variable
} else {
    get from url
    set the time (for checking if 2 minutes have passed)
}

我尝试用

之类的东西来计算时间
if((currentime + 2) < futuretime)

但它对我不起作用。 有人知道如何正确检查自上次执行代码后是否已经过了2分钟?

TL; DR:想要检查IF语句是否已经过了2分钟。

5 个答案:

答案 0 :(得分:6)

将您的算法转换为正常运行的javascript,您可以执行以下操作:

var lastTime = 0;

if ( Math.floor((new Date() - lastTime)/60000) < 2 ) {
    // get from variable
} else {
    // get from url
    lastTime =  new Date();
}

你可以将if块放在一个函数中,并在你想从变量或url获取信息的时候调用它:

var lastTime = 0;

function getInfo() {
    if ( Math.floor((new Date() - lastTime)/60000) < 2 ) {
            // get from variable
    } else {
        // get from url
        lastTime =  new Date();
    }
}

希望它有所帮助。

答案 1 :(得分:3)

如果您想在JavaScript中使用计时器执行某些操作,则应使用setTimeoutsetInterval

让代码以连续循环方式运行会导致browser's VM to crash

使用setTimeout非常简单:

setTimeout(function(){
    // do everything you want to do
}, 1000*60*2);

这将导致该函数在at least two minutes from the time the timeout is set中运行(有关更多详细信息,请参阅John Resig的此博客文章)。第二个参数是毫秒数,因此我们乘以60得到分钟,然后乘以2得到2分钟。

setInterval,遵循相同的语法,每隔几毫秒就会做一些事情。

答案 2 :(得分:1)

不使用第三方库,只需使用Date.getTime()并将其存储为某个变量:

var lastRun = null;

function oneIn2Min() {
    if (lastRun == null || new Date().getTime() - lastRun > 2000) {
        console.log('executed');
    }
    lastRun = new Date().getTime();
}

oneIn2Min();  // prints 'executed'
oneIn2Min();  // does nothing
oneIn2Min();  // does nothing
setTimeout(oneIn2Min, 2500);  // prints 'executed'

您也可以选择从中制作一些简单的对象(以保持代码的有序性)。它看起来像这样:

var CachedCall = function (minTime, cbk) {
    this.cbk = cbk;
    this.minTime = minTime;
};

CachedCall.prototype = {
    lastRun: null,

    invoke: function () {
        if (this.lastRun == null || new Date().getTime() - this.lastRun > this.minTime) {
            this.cbk();
        }
        this.lastRun = new Date().getTime();
    }
};

// CachedCall which will invoke function if last invocation
// was at least 2000 msec ago 
var c = new CachedCall(2000, function () {
    console.log('executed');
});

c.invoke(); // prints 'executed'
c.invoke(); // prints nothing
c.invoke(); // prints nothing 
setTimeout(function () {c.invoke();}, 2300); // prints 'executed'

答案 3 :(得分:0)

如果您打开包含第三方库,这在其他任务中也可能非常方便: http://momentjs.com/docs/#/manipulating/add/

答案 4 :(得分:0)

你可以做那样的事情

var myVal = {
  data: null,
  time: new Date()
}

function getMyVal () {
  if(myVal.time < new Date(new Date().getTime() - minutes*1000*60)) {
    myVal.data = valFromRequest;
    myVal=time=new Date();
  }
  return myVal.data;
}