为什么我的计时器每三天不动态重置一次?

时间:2019-08-29 16:00:29

标签: javascript algorithm debugging

我想知道我在尝试每三天重置一次计时器的代码逻辑中做错了什么。在下面的代码中,我将计时器设置为2019年9月1日到期,即现在的三天之后。

我希望它自行重置为2019年9月4日,然后重置为2019年9月7日,等等。

我在做什么错了,我该如何纠正?下面还提供了JSFiddle。

https://jsfiddle.net/des6gjqa/

SumProduct

3 个答案:

答案 0 :(得分:1)

您的问题没有您想的那么复杂。请考虑以下内容:

  • JavaScript是一种客户端语言(对于此示例)
  • 可以轻松操纵浏览器数据(localStorage,缓存等)。
  • 关闭页面后,JavaScript执行停止。
  

因此,每三天重置一次您尝试使用的计时器的唯一方法是在三天内不关闭窗口。因为当您关闭它并再次访问该网站时,计时器将从0开始。

你应该怎么做?

最好的方法是在服务器上运行某些程序。 (即PHP,Node.js,Python,Java等) 然后,您应该使用一种方法来识别用户的计算机,例如IP地址,自定义令牌(生成的服务器端)等。

这样,您可以为使用会话ID访问您网站的用户分配Cookie,并将开始日期保存在数据库中。这样,您可以随时随地轻松地将实际日期与开始日期进行比较,如果经过时间大于3天,则可以进行评估,显示EXPIRED。

  

否则,您提供的脚本将在每次加载后开始计数3天。

答案 1 :(得分:0)

请参阅k3llydev的答案以获取更可靠的修复。如果您希望该代码在客户端将在整个持续时间内都处于打开状态的情况下作为客户端,那么在这里,我对jsfiddle进行了修改:https://jsfiddle.net/as57fjuL/

从本质上讲,这只是在清除间隔并重新设置日期后重新设置“ x”间隔。为简单起见,我将超时手动设置为大约3秒(可以通过删除行countDownDate = new Date(Date.now().valueOf() + 5000);来更改)。

答案 2 :(得分:0)

您错过了表达的第二名: 而不是(3 * 24 * 60 * 1000)您应该使用(3 * 24 * 60 * 60 * 1000)