2011-02-28 102 views
1

我想不过来我公司内部网页上放的天数,直到下一个发薪日, - 发薪日日期是不是每4周等,他们将与此类似:倒计时在Javascript

1st January 2011 
15th February 2011 
12th March 2011 
20th April 2011 
... 

是否有可能具有上述日期列出的JavaScript倒计时时钟,所以一旦一个日期已过,它会开始倒计时,直到下一个日历日期?

我可以找到很多直到特定日期倒计时的脚本示例,但没有一个会在第一次通过后开始倒计时到第二个日期。

感谢, 丹

+0

你有没有尝试把日期放入数组? – 2011-02-28 11:20:48

+0

@Ash - 说实话,我对JavaScript一无所知。我希望链接到一个教程或类似的东西。 – dannymcc 2011-02-28 11:22:18

回答

2

把日期在数组中。请注意,在Javascript的月份是从零开始所以从0到11迭代数组和当日期是更大然后今天之间显示天:

var calcPayDate = function() { 
     var payDates = []; 
     payDates.push(new Date(2011, 0, 1)); 
     payDates.push(new Date(2011, 1, 15)); 
     payDates.push(new Date(2011, 2, 12)); 
     payDates.push(new Date(2011, 3, 20)); 

     var today = new Date(); 
     for (var i = 0; i < payDates.length; i++) { 
      if (payDates[i] > today) { 
       document.getElementById('countdownDiv').innerHTML = calcDays(payDates[i], today); 
       break; 
      } 
     } 
    } 

    var calcDays = function(date1, date2) { 

     // The number of milliseconds in one day 
     var ONE_DAY = 1000 * 60 * 60 * 24 

     // Convert both dates to milliseconds 
     var date1_ms = date1.getTime() 
     var date2_ms = date2.getTime() 

     // Calculate the difference in milliseconds 
     var difference_ms = Math.abs(date1_ms - date2_ms) 

     // Convert back to days and return 
     return Math.round(difference_ms/ONE_DAY) 

    } 

的calcDays功能是一种功能发现this网站

这些日子被放在一个叫做“倒计时”的div中。

+0

我在做这个错误:http://jsfiddle.net/fWYrM/? – dannymcc 2011-02-28 12:04:40

+0

@dannymcc:你只需要调用实际的函数:http://jsfiddle.net/fWYrM/1/ – pimvdb 2011-02-28 12:06:25

+0

就像@pimvdb所说的那样。在正文的onload调用该函数。或者使用像jQuery这样的框架将它绑定到onload事件。 – TurBas 2011-02-28 12:32:26

0

在网上搜索 “的JavaScript教程”。

同时,这里的一些代码,让你开始:

var dates = [ 
    new Date(2011, 0, 1), // note that format is year, month-1, day 
    new Date(2011, 1, 15), // don't ask me why 
    new Date(2011, 2, 12), 
    new Date(2011, 3, 20) 
]; 

var now = new Date(); 

for (var i in dates) { // this is a foreach loop 
    if (now < dates[i]) { 
     document.write(Math.ceil((dates[i] - now)/86400000)); 
     break; 
    } 
} 
+1

在您的代码中,变量i未初始化,您使用for-in循环遍历数组。两者都被认为有害。你应该编辑你的代码。 – duri 2011-02-28 11:51:16

+0

@duri“我没有初始化” - 但它在第一次被使用时被赋予一个值! “你使用for-in循环遍历数组” - 这有什么问题? – Stewart 2011-02-28 19:12:44

+0

它是否被赋予一个值并不重要。使用'var'可以防止变量泄漏到全局范围。 +请参阅http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays – duri 2011-02-28 20:10:58