2011-02-28 165 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