2011-09-20 103 views
0

在Javascript中,只要我们调用getDate()方法,就会在该月的特定日期返回值1-31。当我在var goal中指定的未来日期大于31时,会在倒数计时器中产生问题,导致倒数计时器输出“12”,而不是实际保留到未来日期的天数。Javascript getDate()倒数计时器的方法

function twoDigits(number) {return (number < 10 ? '0' : '') + number}; 

     var goal = "Sun January 01 2012 00:00:01"; 
     goal = new Date(goal); 
     var now = new Date(); 
     var count = new Date(goal.getTime() - now.getTime()); 
     var day = count.getDate() -1; 
     var hour = count.getHours()-1; 
     var format = twoDigits(day) + ":" + twoDigits(hour) + ":" + twoDigits(count.getMinutes()) + ":" + twoDigits(count.getSeconds()); 
     $(function() { 
     $('#counter').countdown({ 
      image: 'digits.png', 
      startTime: format 
     }); 
     }); 

任何想法如何解决这个问题?

+0

Date.UTC(年,月,日,时,分,秒,毫秒) 计算从获得的毫秒值.. – Kris

+0

希望实现倒计时。但在你的例子中,你过去使用日期?有些错误还是? –

回答

1
function padLeft(str,len,char) { 
    len=Number(len)||1; 
    char=String(char)||" "; 
    for(var i=0;i<len;i++)str=char+str; 
    return str.substr(str.length-len); 
} 

//$(document).ready(function() { 
    var goal = "Sun January 01 2011 00:00:01"; 
    goal = new Date(goal); 
    var now = new Date(); 
    var count = goal.getTime() - now.getTime(); 
    var sign = count/Math.abs(count); 
    count = Math.abs(count); 
    var days = Math.floor(count/(24*60*60*1000)); 
    count -= days*24*60*60*1000; 
    var hours = Math.floor(count/(60*60*1000)); 
    count -= hours*60*60*1000; 
    var minutes = Math.floor(count/(60*1000)); 
    count -= minutes*60*1000; 
    var secs = Math.floor(count/1000); 

    var startTime = days +":"+ padLeft(hours,2,"0") +":"+ padLeft(minutes,2,"0") +":"+ padLeft(secs,2,"0"); 
    alert(startTime); 
    /* 
    $("#counter").countdown({ 
     image: 'digits.png', 
     startTime: startTime, 
     format: "dd:hh:mm:ss" 
    }); 
    */ 
//} 
+0

这在理论上应该是完美的。但是,当我使用它与此倒计时计时器相结合时:http://jquery-countdown.googlecode.com/svn/trunk/index.html它不起作用,数字显示不稳定。我尝试了各种修改无济于事。 这里是计时器的来源:http://jquery-countdown.googlecode.com/svn/trunk/js/jquery.countdown.js – GoofyBall

+0

@GoofBall:你的意思是:_when我用它与这个倒计时一起使用timer_。你用我的代码来设置'startTime'选项?或者是什么? –

+0

是的。我发送的countdown.js文件是使数字翻转等等的来源。您的代码旨在将startTime设置为将来的日期,然后开始倒计时。 – GoofyBall

0

这不是你的代码的问题 一个确切的修复,但如果你想为日期的辅助方法,看看sugar.js它的辅助方法主机一样轻松地计算现在和给定日期之间的天差。 看看the features page for all date methods

,你可以使用此功能,例如:

var goal = "Sun January 01 2011 00:00:01"; 
goal = new Date(goal); 
var difference = goal.daysFromNow(); 

daysFromNow()已经是daysUntil() & daysSince()作为计算在过去或未来的不同别名,daysFromNow()负责的过去和未来:)

和那个变量会给你总天数,即使它超过31天。

+0

有趣,以前从未听说过。我确实发现datejs也很好。这就像phps日期功能。 – Matt

+0

是真的,但我使用sugarjs的原因很多,是数组/对象/函数,甚至字符串或数字的额外功能...如果我只需要额外的日期,我会发现DateJs太多了...... – Sander

+0

@桑德我仍然需要看看这个。我今天会做一些时间。 – GoofyBall