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

g6baxovj  于 2023-03-21  发布在  Java
关注(0)|答案(3)|浏览(165)

我想在每个午夜自动将变量重置为0,而无需任何用户交互。
如何在普通的Javascript中做到这一点?
或者Chrome有什么默认的方法来做这件事。因为我把这个变量存储在Chrome.storage.local中。
在vanilla JS或使用chrome apis中,最好的方法是什么?

xqk2d5yq

xqk2d5yq1#

如果用户不访问该页面,则无法自动执行此操作。
但是,您可以在页面中添加脚本,以便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}))
    }
}
ozxc1zmp

ozxc1zmp2#

你说你把值存储在Chrome.storage.local中。同时存储你保存该值的日期/时间。当你加载它时,如果从那时起已经过了午夜,把值重置为零。
如果该页已被打开一夜,要么总是从存储加载值,然后再使用它(即使您已经在JavaScript变量中有了它),或者在JavaScript级别做同样的事情(记住日期/时间并重置值)。虽然您可以设置计时器,但长时间闲置的页面会被现代浏览器降低计时器的优先级,所以用计时器来做可能不太可靠。

ulydmbyx

ulydmbyx3#

既然您说的是Chrome,我就假设您指的是浏览器,而您要重置的变量在客户端应用程序中(即在浏览器中)。
您可以通过两种方式来执行此操作:
1.仅使用客户端应用程序(即,没有服务器帮助)。
1.使用服务器辅助(即,利用服务器辅助)。
以下是对如何实施每一项的见解:
1.没有服务器帮助:您可能希望实现例如reset_variable在setTimeout()setInterval()的帮助下调度()函数。(),并将间隔调整为24小时。为了做到这一点,您必须实现一些算法来计算何时开始使用setTimeout()执行(即触发)setInterval()。
1.在服务器帮助下:您可能希望在服务器上实现一个类似cron的作业。该作业可能看起来像发送一些预定义的值来重置浏览器上的变量。因此,您可以通过多种方式来实现它。最简单的方法是通过WebSocket
如果你想在服务器端的帮助下实现它,请解释(我的意见是,但它仍然取决于这里不清楚的上下文):
1.浏览器/客户端:在浏览器上实现一个监听器,例如message event,每当你捕获一条消息时,如果它是预定义的值,则处理该消息以重置变量,然后someVar.reset()。
1.服务器端:创建一个处理程序连接到客户端的WebSocket监听器-WebSocket在大多数编程语言中都支持-.实现一个类似cron的作业,在每个午夜执行一个函数。我不知道你是否有服务器,如果有,你使用的是哪种编程语言。但是,一个类似cron的作业可以用几种编程语言实现,基本上,它可以在类似Unix的操作系统上原生实现,如果你需要这方面的帮助,你可能想问另一个问题。函数应该使用WebSocket连接的处理程序发送一个预定义的值。注意,你可能想做一些安全验证。

相关问题