Javascript倒计时器无法设置半小时

时间:2014-01-29 23:40:53

标签: javascript

我正在尝试使用倒计时器来计算每天的某个时间(星期一到星期五)。到目前为止一切正常,除了它只能设置为计算到某个小时(基于24小时制)而不包括半小时。例如,如果我想要计算到下午4点,我会设置var target = 16;,但如果我想要4:30并且我尝试设置var target = 1630;则不起作用。不幸的是,我对javascript没有多少经验,但我认为问题在于它使用getHours函数评估目标时间的方式,但不确定从哪里获取它。

if (document.getElementById('countdownTimer')) {
    pad = function(n, len) { // leading 0's
        var s = n.toString();
        return (new Array( (len - s.length + 1) ).join('0')) + s;
    };
    function countDown() {
        var now = new Date();
        if ( (now.getDay() >= 1) && (now.getDay() <= 5) ) { // Monday to Friday only
            var target = 15; // 15:00hrs is the cut-off point
            if (now.getHours() < target) { // don't do anything if we're past the cut-off point
                var hrs = (target - 1) - now.getHours();
                if (hrs < 0) hrs = 0;
                var mins = 59 - now.getMinutes();
                if (mins < 0) mins = 0;
                var secs = 59 - now.getSeconds();
                if (secs < 0) secs = 0;
                var str = pad(hrs, 2) + ':' + pad(mins, 2) + '.<small>' + pad(secs, 2) + '</small>';
                document.getElementById('countdownTimer').innerHTML = str;
            }
        }
    }
    var timerRunning = setInterval('countDown()', 1000);
}

3 个答案:

答案 0 :(得分:1)

如果您考虑使用其他方法,则以下javascript将在未来的任何日期倒计时(以秒为单位)(并在日期过后计算)。

// new Date(year, month, day, hours, minutes, seconds, milliseconds)
var target = new Date(2014, 0, 30, 12, 30, 0, 0)

function countdown(id, targetDate){
    var today = new Date()
    targetDate.setDate(today.getDate())
    targetDate.setFullYear(today.getFullYear())
    targetDate.setMonth(today.getMonth())
    var diffMillis = targetDate - today
    if (diffMillis >= 0){
        document.getElementById(id).innerHTML = millisToString(diffMillis)
    }
}

setInterval(function(){countdown('seconds', target)},1000)

它使用javascript日期对象,因此您可以逐字地使用任何日期。

更新了要执行的示例:

  • 使用小时:分钟:秒等格式化倒计时
  • 在到达日期后停止计时器

更新:更新了代码,将targetDate覆盖到今天的日期。

示例: http://jsfiddle.net/kKx7h/5/

答案 1 :(得分:0)

对于4:30PM,请尝试使用var target = 16.5代替var target = 1630;

答案 2 :(得分:0)

您现在需要为分钟添加另一个变量。我们可以将target作为对象文字,而不是为时间声明两个变量:

 var target={hour: 15, minute:30};

if ( (now.getHours() < target.hour) && () now.getMinutes() < target.minute ){