如何每天在特定时间使用Javascript重新加载URL?

时间:2018-08-03 08:26:32

标签: javascript scheduled-tasks job-scheduling

我有一个由cron作业调用的URL,但是我无法使其正常工作。

我打算使用Javascript做同样的事情:如何在一天的特定时间(晚上8:00)以这种方式重新加载页面?

2 个答案:

答案 0 :(得分:0)

  

我想从索引页面重新加载控制器。我将编写此脚本并将URL放在此处– Hasif

由于在您的情况下只能在前端使用Javascript,因此用户需要始终保持页面处于打开状态(如您所述 index )。这意味着:

  • 仅当用户保持浏览器保持打开状态时才进行URL呼叫(如果确实需要每天运行此任务,则不应依赖客户端来实现该任务);
  • 您提到的cron-job是更好的选择,但您无法强制用户的浏览器每天在晚上8:00打开
  • 如果应该同时为所有用户加载该URL,
  • 用户的本地时间对于触发此事件将不会有用,因此请在 UTC时区中的某个时间触发该事件(例如)。

解决方案

  1. 创建一个 cookie 来存储用户上次加载 index 页面的日期和时间,并在每次页面加载时将其与当前日期进行比较,并仅将网址加载一次(MDN example)。您可能想在后端设置cookie,但要使用一个简单的示例在JS中存储和加载它:

var td =new Date(), date2store = `${td.getUTCFullYear()}-${td.getUTCMonth().toString().padStart(2,0)}-${td.getUTCDate().toString().padStart(2,0)} ${td.getUTCHours().toString().padStart(2,0)}:${td.getUTCMinutes().toString().padStart(2,0)}`;
alert('Cookie to store: last_date=' + date2store + ' --> Is it after 8 PM UTC? ' + (new Date(date2store).getUTCHours() >= 19 ? 'YES!' : 'NO!' ));

  1. 如果用户将浏览器保持打开状态直到第二天,请使用加载到页面中的简单脚本检查当前UTC时间并进行更新:

// place the code below in a setInterval(function() {...}, 1000*60*60);
// the if below should also the test the current cookie's datetime as the first condition
// 0 index hour exists (therefore compare with 19 instead of 20)
if(new Date().getUTCHours() >= 19) {
  alert('Past 8 PM');
  // save the current date and time in the cookie HERE
  
  // reload the index page
  // window.location.reload(true); // true for not using cache
  // OR redirect to a new location
  // window.location.href = 'https://...';
} else alert('Not 8 PM yet');

答案 1 :(得分:-1)

以下JavaScript代码段将允许您在给定的时间刷新:

function refreshAt(hours, minutes, seconds) {
var now = new Date();
var then = new Date();

if(now.getHours() > hours ||
   (now.getHours() == hours && now.getMinutes() > minutes) ||
    now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) {
    then.setDate(now.getDate() + 1);
}
then.setHours(hours);
then.setMinutes(minutes);
then.setSeconds(seconds);

var timeout = (then.getTime() - now.getTime());
setTimeout(function() { window.location.reload(true); }, timeout);
 }

然后,您可以添加脚本标签来调用refreshAt()函数。

refreshAt(15,35,0); //Will refresh the page at 3:35pm