如何在 Javascript 中每 24 小时将变量重置为 0?

How to reset a variable to 0 every 24 hours in Javascript?

我想在每个午夜无需任何用户交互的情况下自动将变量重置为 0。

如何在原版中做到这一点 Javascript?

或者 Chrome 是否有任何默认方法来执行此操作。因为我将该变量存储在 Chrome.storage.local.

在 vanilla JS 或使用 chrome api 中最好的方法是什么?

您说过要将值存储在 Chrome.storage.local 中。同时存储您保存该值的 date/time。当您加载它时,如果从那时起已经过了午夜,则将值重置为零。

如果页面在一夜之间保持打开状态,请始终在使用之前从存储中加载值(即使您已经将其保存在 JavaScript 变量中),或者在 JavaScript 级别(记住 date/time 并重新设置值)。尽管您 可以 设置一个计时器,但长时间闲置的页面的计时器会被现代浏览器取消优先级,因此使用定时器。

如果用户不访问该页面,则不可能自动执行此操作。

但是,您可以将脚本添加到 onload 检查上次存储值的时间的页面,如果时间过去了,您可以重置变量。

粗略的代码:

const isToday = (someDate) => {
  const today = new Date()
  return someDate.getDate() == today.getDate() &&
    someDate.getMonth() == today.getMonth() &&
    someDate.getFullYear() == today.getFullYear()
}

window.onload = function init() {
    const { value, date } = JSON.parse(localStorage.getValue('key'));
    
    if (!isToday(date)) {
        localStorage.setValue('key', JSON.stringify({ date: new Date(), value: defaultValue}))
    }
}

在没有服务器协助的情况下,您可能希望在 setTimeout() 的帮助下实施 reset_variable() https://developer.mozilla.org/en-US/docs/Web/API/setTimeout and setInterval() https://developer.mozilla.org/en-US/docs/Web/API/setInterval - 但您必须先在午夜触发 setInterval() , 并调整间隔为 24h。因此,您必须使用 setTimeout() 实现一些算法来计算何时开始执行(触发)setInterval()。

借助服务器协助,您可能希望在服务器中实现类似 cron 的作业。该作业可能看起来像是发送一些预定义的值来重置浏览器上的变量。 因此,您可以通过多种方式进行。最简单的方法是通过 WebSocket https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API.

说明: Browser/Client-side: 在浏览器 Ex 上实现一个监听器,消息事件 https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/message_event,每当您捕获到消息时,处理该消息(如果它是预定义的值以重置变量),然后 someVar.reset().

服务器端: 创建一个处理程序以连接到客户端 WebSocket 侦听器 - 大多数编程语言都支持 WebSocket -。 实现一个类似 cron 的作业以在每个午夜执行一个函数。我不知道您是否有服务器,如果有,您使用的是哪种编程语言。但是,类似 cron 的作业可以用多种编程语言实现,基本上,它可以在类 Unix 操作系统上本地实现,如果您需要这方面的帮助,您可能想问另一个问题。 该函数应使用 WebSocket 连接的处理程序发送预定义的值。 -不过你可以做一些安全验证-