前端实现定时任务,每天定时更新数据 “ setInterval + new Date()(或moment.js)“

项目场景:

每天定时更新系统数据,前端通过系统时间及setInterval来实现


问题描述

在项目中会遇到一些情况,比如用户不关闭设备,导致设备有时无法同步最新的数据,这里就需要通过特定时间来重新获取最新数据并渲染出来,此时就需要通过定时任务来满足这种需求;


解决方案:

提示:这里通过new Date()计算时间差,通过定时器setInterval来实现指定时间更新数据:

javascript 复制代码
// 切记,登录系统后先跑一下定时任务
timedTask();


/* 定时任务,每天定时获取数据 */
export const timedTask = () => {
  // 获取当前时间
  const now: any = new Date();

  // 这里设置刷新时间为每天固定时间(例如 08:00:00)
  const refreshTime: any = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 8, 0, 0);

  // 计算当前时间距离刷新时间的时间间隔(以毫秒为单位)
  const timeUntilRefresh: any = refreshTime - now;

  // 如果当前时间已经超过刷新时间,则将刷新时间设置为明天的同一时间
  if (timeUntilRefresh < 0) {
    refreshTime.setDate(refreshTime.getDate() + 1);
  }

  // console.log(refreshTime - Date.now(), '定时任务,每天定时获取数据');

  // 设置定时任务,每天固定时间执行刷新数据函数
  const timer = setInterval(() => {
    if ("TODO:需求特定条件") {
    // 时间到处理你的方法
      yourFunction();
       //这里记得清除一下定时器,后面说明原因
      clearInterval(timer);
    }
  }, refreshTime - Date.now());
};




/* 需要处理数据的方法 */
export const yourFunction = () => {
  setTimeout(() => {
    timedTask();
  }, 180000); // 暂定,三分钟后重新开启定时任务
  // ......
  // ......
  // ......
  // 这里处理数据
}

提示:
new Date(year, month, day, hours, minutes, seconds, milliseconds) // 注意:这种方式下,必须传递整型;

各种变量代表的含义是:

  month: 用英文 表示月份名称,从January到December ,缩写也行(Jan...Dec);

  year: 四位数表示的年份

  month: 用整数表示月份,从0(1月)到11(12月)

  day: 表示一个月中的第几天,从1到31, defaults to 1.

  hours: 小时数,从0(午夜)到23(晚11点), defaults to 0.

  minutes: 分钟数,从0到59的整数, defaults to 0.

  seconds: 秒数,从0到59的整数, defaults to 0.

  milliseconds: 毫秒数,为大于等于0的整数, defaults to 0.

  

  

  这里也可以使用使用moment插件将日期转换为毫秒数非常简单。可以使用moment().valueOf()方法来获取当前时间的毫秒数,也可以使用moment(日期).valueOf()方法将给定日期转换为毫秒数。

   // 假设你有一个不同格式的时间字符串

   const timeString = "15-11-2023 16:30:35";

   // 使用 moment 解析这个格式的时间字符串,指定格式

   const time = moment(timeString, "DD-MM-YYYY HH:mm:ss");

   // 然后使用 valueOf 获取这个时间的 Unix 时间戳(毫秒数)

   const timestamp = time.valueOf();

   console.log(timestamp); // 输出时间的毫秒表示

相关链接:
JavaScript简单倒计时效果的实现

相关推荐
IT_陈寒16 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
code2cat16 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
北京中科新远科技16 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
工控丫丫16 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
xiaoye-duck17 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
jerrywus17 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
AI源码17 小时前
基于 Python 的短视频用户行为分析系统
开发语言·python
旖旎夜光18 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
揽星河..18 小时前
【C语言】结构体
c语言·开发语言
孟陬18 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端