5

我只是想知道是否有可能有一个 javascript for 循环,它每天只迭代一次循环,即当日期更改时?

for(i=0; i < myArray.length; i++){

    alert(myArray[i]);

}

所以在上面的循环中,让它运行,然后冻结它或其他东西,直到数据发生变化,然后再做一次迭代,然后继续这样做......你知道我的意思。

提前致谢!

4

3 回答 3

15

当您没有服务器时,使用localStorage是最好的方法(因为用户可以更改计算机的时间并破坏您的逻辑,并且使用服务器更难破解)

下面的方法更防弹:

// checks if one day has passed. 
function hasOneDayPassed()
  // get today's date. eg: "7/37/2007"
  var date = new Date().toLocaleDateString();

  // if there's a date in localstorage and it's equal to the above: 
  // inferring a day has yet to pass since both dates are equal.
  if( localStorage.yourapp_date == date ) 
      return false;

  // this portion of logic occurs when a day has passed
  localStorage.yourapp_date = date;
  return true;
}


// some function which should run once a day
function runOncePerDay(){
  if( !hasOneDayPassed() ) return false;

  // your code below
  alert('Good morning!');
}


runOncePerDay(); // run the code
runOncePerDay(); // does not run the code
于 2015-09-06T21:01:20.200 回答
3

如果您希望以预定义的时间间隔发生某些事情,您可以设置超时/时间间隔: http ://www.w3schools.com/js/js_timing.asp

例如:

var dayInMilliseconds = 1000 * 60 * 60 * 24;
setInterval(function() { alert("foo"); },dayInMilliseconds );

编辑:由于您提到代码将在浏览器中运行,因此假设浏览器至少运行 24 小时,否则将无法运行。

于 2012-07-31T14:06:27.337 回答
2

实现它的最佳方法是创建一个持续 1 天的 cookie。即使在网页或浏览器刷新后关闭,倒计时仍将继续。

setcookie($cookie_name, $cookie_value, time() + 86400, "/"); 

这意味着 86400 = 1 天

希望能帮助到你

于 2017-07-09T12:51:45.540 回答