2016-12-15 63 views
0

我使用此代码,以倒计时的日期:Javascript代码不计日期正确

function countdown() 
{ 
    var now = new Date(); 
    var end = new Date('Mars 13, 2016 13:12:12'), 

    $.each(times, function(key, value) { 
     var left = end - now; 
     var days = Math.floor(left/(1000 * 60 * 60 * 24)); 
     var hours = Math.floor((left % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
     var minutes = Math.floor((left % (1000 * 60 * 60))/(1000 * 60)); 
     var seconds = Math.floor((left % (1000 * 60))/1000); 

     displayTime = ''; 
     if (days > 0) { 
      displayTime = days+' days'; 
     } 
     displayTime = displayTime + ' ' +hours+' Hours ' + minutes+' Minutes ' + seconds+'s'; 

     $('#cont'+value.id).text(displayTime) 
    }); 

} 

但既然是不考虑它无法正确计算,如果一个月有31天,28/29天...

而第二件事是,当它到达过期的日期,它不会停止,并继续倒数到零以下。

我做错了什么,请问该如何解决?

+0

没有理由来计算这个自己,看看http://www.w3schools.com/js/js_date_methods.asp使用内置日期的方法。 – jmiraglia

+0

任何示例?我没有在你的链接中找到。 –

+0

我相信你的问题的一部分是你没有使用UTC日期。结帐这个答案在这里:http://stackoverflow.com/a/15289883/407526 ..也好奇,为什么月计数将在您的示例中很重要,因为您显示“月”的金额,直到... – Adrian

回答

1

我做倒计时的方式是创建一个名为countdown.js倒计时启动脚本,然后包括这个脚本在主网页的脚本标签的src="countdown.js"

这里是countdown.js代码

CountDownTimer('12/25/2016 12:0 AM', 'countdown'); 
//CountDownTimer('02/20/2012 10:1 AM', 'newcountdown'); 

function CountDownTimer(dt, id) 
{ 
    var end = new Date(dt); 

    var _second = 1000; 
    var _minute = _second * 60; 
    var _hour = _minute * 60; 
    var _day = _hour * 24; 
    var timer; 

    function showRemaining() { 
     var now = new Date(); 
     var distance = end - now; 
     if (distance < 0) { 

      clearInterval(timer); 
      document.getElementById(id).innerHTML = 'Merry Christmas!'; 

      return; 
     } 
     var days = Math.floor(distance/_day); 
     var hours = Math.floor((distance % _day)/_hour); 
     var minutes = Math.floor((distance % _hour)/_minute); 
     var seconds = Math.floor((distance % _minute)/_second); 

     if(hours < 10){ 
      hours = "0"+hours; 
     } 
     if(minutes < 10){ 
      minutes = "0"+minutes; 
     } 
     if(seconds < 10){ 
      seconds = "0"+seconds; 
     } 

     document.getElementById(id).innerHTML = "<span id='daycount'>" + days + ' days</span><br/>'; 
     document.getElementById(id).innerHTML += hours + ':'; 
     document.getElementById(id).innerHTML += minutes + ':'; 
     document.getElementById(id).innerHTML += seconds + ''; 
    } 

    timer = setInterval(showRemaining, 1000); 
} 

现在你主页上

包括倒计时脚本<script src="countdown.js"></script>我你的<head>

然后用id="countdown"创建一个div。

倒数div的idcountdown.js脚本的第一行定义,作为CountDownTimer();的第二个函数输入。

我的代码设置为倒计时至圣诞节,您可以通过修改第一行countdown.js来轻松更改此日期和时间以适应您的日期需求。请确保您使用与提供的日期相同的格式! mm/dd/yyyy H:m AM/PM

+1

Aww,你让他太容易了。 GJ虽然。 – jmiraglia

+0

仍然有同样的问题,没有什么改变......有一天的不同(我的脚本和你的工作方式一样,我没有使用它的问题......我只是想解决月的问题)。 –

+0

@JisMaxi计算机的时间设置为? Javascript使用客户端机器查看页面的时间,因此它将取决于系统时间。检查计算机上的时钟,并将其设置为正确的日期,如果它尚未? – pattyd

0

您不应该使用Date构造函数解析字符串(或Date.parse,它们与解析相当)。要么自己写一个小函数,要么使用一个库。另外,如果你的代码依赖于一个特定的库,你应该为它包含一个标签。这里有很多关于如何创建计时器的帖子。

你发布的代码没有任何月份,所以你不清楚为什么你有问题。也许你想倒数年,蛾,天等等?这是一个比几天,几小时等更难的问题,并且有questions and answers for that too

var countDown = (function() { 
 
    var endDate; 
 
    
 
    return function(eDate) { 
 
    endDate = endDate || eDate; 
 
    var msg = ''; 
 
    var now = Date.now(); 
 
    var r = endDate - now; 
 
    var d, h, m, s; 
 
    
 
    if (r <= 1000) { 
 
     msg = 'Finished!'; 
 

 
    } else { 
 
     d = r/8.64e7 | 0; 
 
     h = r % 8.64e7/3.6e6 | 0; 
 
     m = r % 3.6e6/6e4 | 0; 
 
     s = r % 6e4/1000 | 0; 
 
     msg = (d? d + ' day' + (d == 1? '':'s') + ', ' : '') + 
 
      h + ' hour' + (h==1?'':'s') + ', ' + 
 
      m + ' minute' + (m==1?'':'s') + ' and ' + 
 
      s + ' second' + (s==1?'':'s'); 
 
    } 
 
    document.getElementById('counter').textContent = msg; 
 
    var lag = 1010 - (Date.now() % 1000); 
 

 
    if (r > 0) { 
 
     setTimeout(countDown, lag); 
 
    } 
 
    } 
 
}()); 
 

 
countDown(new Date(2016,11,25));
<span id="counter"></span>