4

所以,我有下面的(秒倒计时)井井有条。但!我正在尝试添加小时和分钟作为倒计时的一部分。理想情况下保持相同的结构,并且只使用纯 JS。我希望输出为:

本次特卖还剩 X 小时 X 分钟 X 秒!

var count=30;

    var counter=setInterval(timer, 1000); //1000 will  run it every 1 second

    function timer()
    {
      count=count-1;
      if (count <= 0)
      {
         clearInterval(counter);
         return;
      }

     document.getElementById("timer").innerHTML=count + " secs"; // watch for spelling
    }

如果解决方案必须用 jQuery 或其他库重写;没关系。只是不太可取。欢呼和问候以获得任何帮助。

4

3 回答 3

18

像这样的东西:

var count = 30;
var counter = setInterval(timer, 1000); //1000 will  run it every 1 second

function timer() {
    count = count - 1;
    if (count == -1) {
        clearInterval(counter);
        return;
    }

    var seconds = count % 60;
    var minutes = Math.floor(count / 60);
    var hours = Math.floor(minutes / 60);
    minutes %= 60;
    hours %= 60;

    document.getElementById("timer").innerHTML = hours + "hours " + minutes + "minutes and" + seconds + " seconds left on this Sale!"; // watch for spelling
}
于 2013-08-15T22:19:12.830 回答
3
var totalSeconds = 3723; // lets say we have 3723 seconds on the countdown
                         // that's 1 hour, 2 minutes and 3 seconds.

var hours   = Math.floor(totalSeconds / 3600 );
var minutes = Math.floor(totalSeconds % 3600 / 60);
var seconds = totalSeconds % 60;

var result = [hours, minutes, seconds].join(':');
console.log(result);
// 1:2:3
  • hours是秒除以小时的秒数 (3600),四舍五入
  • minutes是上述除法的余数,除以一分钟的秒数 (60),向下取整。
  • seconds是总秒数除以一分钟内的秒数的余数。

之后的每个计算hour都必须使用modulus计算来获得余数,因为您不关心该步骤的总时间,只需进行下一个刻度即可。

于 2013-08-15T22:19:12.740 回答
0

我会使用与其他方法类似的方法,但我不会依赖 setInterval / setTimeout 作为计时器,特别是如果用户可能正在查看页面一段时间,因为它往往不准确。

var endTime = new Date(2013, 10, 31).getTime() / 1000;
function setClock() {
    var elapsed = new Date().getTime() / 1000;
    var totalSec =  endTime - elapsed;
    var d = parseInt( totalSec / 86400 );
    var h = parseInt( totalSec / 3600 ) % 24;
    var m = parseInt( totalSec / 60 ) % 60;
    var s = parseInt(totalSec % 60, 10);
    var result = d+ " days, " + h + " hours, " + m + " minutes and " + s + " seconds to go!";
    document.getElementById('timeRemaining').innerHTML = result;
    setTimeout(setClock, 1000);
}
setClock();

此方法每次运行时都会计算现在与未来日期之间的差异,从而消除任何不准确之处。

这是一个例子:http: //jsfiddle.net/t6wUN/1/

于 2013-08-15T22:41:43.980 回答