gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:59 24 4
gpt4 key购买 nike

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

我希望它自行重置为 2019 年 9 月 4 日,然后是 2019 年 9 月 7 日,依此类推。

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

https://jsfiddle.net/des6gjqa/

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
text-align: center;
font-size: 60px;
margin-top: 0;
}
</style>
</head>
<body>

<p id="demo"></p>

<script>
// Set the date we're counting down to
var countDownDate = new Date("Sep 1, 2019 9:45:00").getTime();
while(countDownDate.valueOf() < Date.now()) {
countDownDate = new Date(countDownDate.valueOf() + (3 * 24 * 60 * 1000)); // add 3 days to the start date
}

// Update the count down every 1 second
var x = setInterval(function() {

// Get today's date and time
var now = new Date().getTime();

// Find the distance between now and the count down date
var distance = countDownDate - now;

// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);

// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s ";

// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}

if(countDownDate.valueOf() <= Date.now()) {
countDownDate = new Date(countDownDate.valueOf() + (3 * 24 * 60 * 1000));
}
}, 1000);
</script>

</body>
</html>

最佳答案

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

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

So, the only way to reset the timer every three days with what you are trying is to not close the window during three days. Because when you close it and visit the site once again, the timer will start from 0.

你应该做什么?

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

这样,您可以使用 session ID 为访问您网站的用户分配一个 cookie,并将开始日期保存在数据库中。通过这样做,您可以随时轻松地将实际日期与开始日期进行比较,然后评估是否超过 3 天,显示 EXPIRED。

Because otherwise, the script you provided will start counting 3 days every time it is loaded.

关于javascript - 为什么我的计时器不会每三天动态重置一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com