0

「再起動: x 時間 x 分 x 秒」と表示されるカウントダウン スクリプトを探しています。私のウェブサイト上の私のサーバーの概要については。(6時間ごとに再起動するゲームサーバー用です)

これを行うカウントダウン スクリプトを見つけましたが、実行方法がわかりません。これがスクリプトであり、ウェブサイトに掲載しようとした方法です。

var serverRestartHours = [3,9,15,21]; // in UTC
var startTime = new Date(); 

var hoursOffset = startTime.getTimezoneOffset()/60;
var currentHourUTC = startTime.getHours()+hoursOffset;
var nextRestartHour = 0;

for (i = 0; i < serverRestartHours.length; i++) {
if(serverRestartHours[i] > currentHourUTC){
    nextRestartHour = serverRestartHours[i];
    break;
}
}
if(currentHourUTC >= serverRestartHours[serverRestartHours.length-1])
nextRestartHour = serverRestartHours[0];

var endTime = new Date();
endTime.setMinutes(0);
endTime.setSeconds(0);
endTime.setHours(nextRestartHour-(endTime.getTimezoneOffset()/60));
console.log(endTime);

function update(){
var currentTime = new Date();

var remainingTime = new Date();
remainingTime.setTime(endTime.getTime()-currentTime.getTime());
if(remainingTime<0)
    return;

if(remainingTime.getHours()<=1)
    $("#note").text(remainingTime.getMinutes()+" minutes and "+remainingTime.getSeconds() + " seconds");
else
    $("#note").text(remainingTime.getHours()-1+" hours, "+remainingTime.getMinutes()+" minutes and "+remainingTime.getSeconds() + " seconds");

}
update();
setInterval(update,1000);

これを自分の Web サイトに含めてみました (SimplePortal で SMF を実行し、これを HTML ブロックに実装しようとしました)

<div style="margin:12px;">Restart in: <span id="note"></span>
<script type="text/javascript" src="countdown.js"></script>
</div>

これを行うことで得られるのは、「再起動: x 時間、x 分、x 秒」ではなく、「再起動:」という通常のフォントだけです。

誰か助けて?

4

1 に答える 1

1

setInterval は要求された間隔で実行されることに注意してください後で徐々にドリフトします。特定の時間にできるだけ近いタイミングで何かを更新したい場合は、setTimeout を使用して、待機する必要がある時間を見積もったほうがよいでしょう。

また、コードは必要以上に冗長に見えます。更新が 0300 から 6 時間間隔である場合、次のことができます。

<script>
// Countdown in hh:mm:ss to next 0300, 0900, 1500 or 2100
// Uses local time
function timeToUpdate() {

  // Add leading zero to numbers less than 10
  function z(n) {return (n < 10? '0' : '') + n;}

  var now = new Date();

  // Calculate seconds to go, convert 60 to 00
  var secsToGo = (60 - now.getSeconds()) % 60;

  // Calculate minutes to go. If secs at 0, add 1
  var minsToGo = (59 - now.getMinutes() + !secsToGo) % 60;

  // Calculate hours to go. If secs and mins at 0, add 1
  var hoursToGo = 5 - ((now.getHours() + 3) % 6) + !(minsToGo + secsToGo); 

  // Return formatted string
  return z(hoursToGo) + ':' + z(minsToGo) + ':' + z(secsToGo);
}

function updateClock() {

  // Update counter
  document.getElementById('timeToGo').innerHTML = timeToUpdate();

  // Run just after next full second
  var lag = 1020 - (new Date()).getMilliseconds();
  setTimeout(updateClock, lag);
}
</script>

<button onclick="updateClock()">Start countdown</button>
<div>Restart in: <span id="timeToGo"></span></div>

上記はローカル時間を使用し、UTC を使用するには、UTC メソッドに変更します (例: now.getUTCHours())。

于 2013-05-20T23:07:19.417 に答える