为什么我的倒数时钟停止计数?

时间:2020-05-29 08:54:12

标签: javascript html

让我以JavaScript毫无头绪。

因此,举例来说,我只想链接到一个倒计时,该倒计时将在特定服务器打开之前进行倒计时。

我使用https://www.w3schools.com/howto/howto_js_countdown.asp进行倒计时并对其进行了修改,以使其使用服务器时间而不是客户端时间。

var serverNow =  new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"});

var tomorrowKR = new Date(serverNow);
tomorrowKR.setDate(tomorrowKR.getDate()+1)
tomorrowKR.setHours(18,0,0,0)

var countDownDateKR = tomorrowKR.getTime();
var x = setInterval(function() {
  var now = new Date(serverNow).getTime();
  var distanceKR = countDownDateKR - now;
  var hoursKR = Math.floor((distanceKR % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutesKR = Math.floor((distanceKR % (1000 * 60 * 60)) / (1000 * 60));
  var secondsKR = Math.floor((distanceKR % (1000 * 60)) / 1000);

  document.getElementById("ASIAServer").innerHTML = "The KR Server is currently CLOSED, but will open again in " + hoursKR + "h " + minutesKR + "m " + secondsKR + "s (6 PM KST)" ;
  }, 1000);
}

错误似乎在行中

var now = new Date(serverNow).getTime();

如果我删除“ serverNow”并让它随着客户端时间滚动,它将倒计时。 现在将其更改为server,它将显示正确的倒数时间,但实际的倒数操作将停止。

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

new Date(serverNow)内运行setInterval时,该值不会更新,因为serverNow不会更改。 serverNow是一个固定的字符串,该字符串保留首次加载页面时的值。为了使now每隔一段时间更新一次,您需要获取最新的服务器时间:

now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"})).getTime();

绝对不是世界上最漂亮的代码。您应该知道,在原始Javascript中使用日期和时区总是很麻烦。很多人使用Moment.js来节省很多头痛。