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

Posted

技术标签:

【中文标题】如何在Javascript中每24小时将变量重置为0?【英文标题】:How to reset a variable to 0 every 24 hours in Javascript? 【发布时间】:2021-09-17 17:34:23 【问题描述】:

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

如何在原生 javascript 中做到这一点?

或者 Chrome 是否有任何默认方法可以做到这一点。因为我将该变量存储在 Chrome.storage.local 中。

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

【问题讨论】:

这是一个加载到浏览器中并且在午夜没有重新加载的页面吗?` 对不起,我没听懂你的问题。 通常人们浏览一个网站。你有一个页面,它有一个变量,访问者的用例是什么?如果他们在午夜访问并停留在页面上,是否会重置某些计数器或时钟?还是某个一直加载的监控页面 是监控页面。变量会根据页面中的用户操作而变化。所以我需要每天将其重置为 0 并计算用户操作。 【参考方案1】:

您说过您将值存储在Chrome.storage.local 中。还存储您保存该值的日期/时间。当您加载它时,如果从那时起已经过了午夜,请将值重置为零。

如果页面在一夜之间打开,要么总是在使用它之前从存储中加载值(即使你已经在 J​​avaScript 变量中拥有它),或者在 JavaScript 级别做同样的事情(记住日期/时间并重置值)。尽管您可以设置一个计时器,但长时间处于空闲状态的页面会被现代浏览器取消其计时器的优先级,因此使用计时器执行此操作可能不可靠。

【讨论】:

【参考方案2】:

在没有用户访问页面的情况下自动执行此操作是不可能的。

但是,您可以在页面中添加脚本,以检查上次存储值的时间,如果时间已过,您可以重置变量。

制作这个的粗略代码:

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))
    

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于如何在Javascript中每24小时将变量重置为0?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:将 24 小时时间字符串转换为 12 小时时间,上午/下午且无时区

如何在PHP MySql中每12小时更新一次行?

[12小时Javascript Clock显示24时间,错误的AM / PM

一天中每小时的 SQL 最大并发会话数

如何在 Prometheus 中每小时正确抓取和查询指标

如何在 .NET 中每小时(或每小时的特定时间间隔)引发一个事件?