所以,我有以下(秒倒计时)的顺序。但!我想增加几小时&分钟也是倒数。理想情况下保持相同的结构,只使用纯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或其他库的重写;没关系。只是不可取。 欢呼和致意任何帮助。
答案 0 :(得分:12)
这样的事情:
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
}
答案 1 :(得分:2)
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
计算来获得剩余部分,因为您不关心该步骤的总时间,只是进入下一个刻度。
答案 2 :(得分: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/