倒计时在凌晨3点,上午9点,下午3点和晚上9点重新开始

时间:2013-05-20 21:41:46

标签: javascript jquery countdown

我正在寻找一个可以说“重启: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);

我尝试将此包含在我的网站上(使用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秒”

帮助任何人?

1 个答案:

答案 0 :(得分: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())。