js定时器固定时间

早上九点和晚上九点各执行一次总共两次,有没有好的写法推荐

阅读 2.8k
3 个回答

1、如果是用node.js写的后端服务,那可以用 node-schedule 的一个库添加定时任务。

2、如果是网页端,那用户行为不可控,不可能一致打开着页面,还可能中途刷新页面,那么要在页面加载的时候计算出目标时间,如现在的时间到目标时间到的毫秒数,然后使用 setTimeOut,时长就是你计算的毫秒数,如果用户一直在页面,那时间到了就会执行,如果用户刷新页面还能重新计算出时长。

以上是我的实现方案。

cron 定时任务。

自己上 npm 上找几个支持在浏览器里用的 cron 库吧,比如 cron-scheduletimexecronosjs 之类的,挑一个比较活跃的、自己喜欢的用。

不过你确定是前端执行吗?

就算是 JS 也得是 Node.js 跑在后端执行定时任务吧?

前端执行的前提得是用户浏览器始终开着你们的网页啊。甚至还必须是当前活动的 Tab、不能是个后台 Tab,因为现代浏览器大多有一套资源分配机制,非活动 Tab 到一段时间后很可能 JS 压根就不执行了。

function runTaskAtNineClock(taskFn) {
    var date = new Date();
    var hour = date.getHours();
    var d = new Date();
    d.setMiutes(0)
    d.setSeconds(0)
    d.setMilliseconds(0)
    if(hour < 9) {
        d.setHours(9)
        setTimeout(taskFn, d-date)
    }
    if(hour < 21) {
        d.setHours(21)
        setTimeout(taskFn, d-date)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题