让我以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,它将显示正确的倒数时间,但实际的倒数操作将停止。
这是怎么回事?
答案 0 :(得分:1)
在new Date(serverNow)
内运行setInterval
时,该值不会更新,因为serverNow
不会更改。 serverNow
是一个固定的字符串,该字符串保留首次加载页面时的值。为了使now
每隔一段时间更新一次,您需要获取最新的服务器时间:
now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"})).getTime();
绝对不是世界上最漂亮的代码。您应该知道,在原始Javascript中使用日期和时区总是很麻烦。很多人使用Moment.js来节省很多头痛。