2011-08-18 46 views
7

之間的日期的數組,我有這個我的網頁上:給定一個開始和結束日期,現在創建兩個

<script type="text/javascript"> 
    $(document).ready(function() { 
     var days = [ 
      { Date: new Date($('#hfEventStartDate').val()) }, 
      { Date: new Date($('#hfEventEndDate').val()) } 
     ]; 
    }); 
</script> 

<asp:HiddenField ID="hfEventStartDate" runat="server" /> 
<asp:HiddenField ID="hfEventEndDate" runat="server" /> 

我設置hfEventStartDate和hfEventEndDate頁面加載時。使用我的代碼,它會創建一個包含兩個值的數組:開始日期和結束日期。但我想也有數組包含之間的所有日期。我怎樣才能做到這一點?

+0

請嘗試自己的東西發佈提問之前;這裏的大多數人會對這樣的代碼的請求皺眉。 –

回答

16

你可以利用setDate(getDate() + 1)以 '迭代' 在所有天:http://jsfiddle.net/pimvdb/4GeFD/1/

$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1); 
$("#hfEventEndDate").val(new Date - 0); 

function getAllDays() { 
    var s = new Date($('#hfEventStartDate').val() - 0); 
    var e = new Date($('#hfEventEndDate').val() - 0); 
    var a = []; 

    while(s < e) { 
     a.push(s); 
     s = new Date(s.setDate(
      s.getDate() + 1 
     )) 
    } 

    return a; 
}; 

alert(getAllDays().join("\n")); 
7

這裏一展身手:jsFiddle

var date1 = new Date(); 
var date2 = new Date(2010, 0, 1); 
var day; 
var between = [date1]; 

while(date2 <= date1) { 
    day = date1.getDate() 
    date1 = new Date(date1.setDate(--day)); 
    between.push(date1); 
} 

console.log(between); 
3
 start = new Date("August 13,2011"); 
     future = new Date("October 13, 2011"); 
     range = [] 
     mil = 86400000 //24h 
     for (var i=start.getTime(); i<future.getTime();i=i+mil) { 

      range.push(new Date(i)) 

     //or for timestamp 
     //range.push(i) 
     } 
3

嘗試momment.jstwix

var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days"); 
var range=[]; 
while(itr.hasNext()){ 
    range.push(itr.next().toDate()) 
} 
console.log(range); 

直播:http://jsfiddle.net/aswani/GNPQc/

0

這也爲我工作:

$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1); 
$("#hfEventEndDate").val(new Date - 0); 

function getAllDays() { 
    var s = new Date($('#hfEventStartDate').val() - 0); 
    var e = new Date($('#hfEventEndDate').val() - 0); 
    var a = []; 
    while(s <= e) { 
     a.push(new Date(s)); 
     s.setDate(s.getDate() + 1); 
    } 

    return a; 
}; 

alert(getAllDays().join("\n")); 

是相同的代碼該pimvdb發佈了一些較小的變化,但它給出了不同的結果。我花了4小時試圖瞭解爲什麼,這就是我想用pimvdb代碼發生:

1 loop 
a[0] = S1 = $("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1); 
//2013-09-01 

2 loop 
a[0] = s1.setDate(s1.getDate() + 1); // 2013-09-02 
a[1] = s2 = new Date(s1.setDate(s1.getDate() + 1)) // 2013-09-02 

3 loop 
a[0] = s1; // 2013-09-02 
a[1] = s2.setDate(s2.getDate() + 1); // 2013-09-03 
a[2] = s3 = new Date(s2.setDate(s2.getDate() + 1)) // 2013-09-03 

and so on... 

我不知道這是否是故意pimvdb打算,但他的代碼了左派開始的第一天,這在我的例子中是2013-09-01。但即使它是有意的,爲什麼不留下最後一天呢?至少這就是(<e)的意圖,但最後一天被包含在最終陣列中。

對不起,我可能是錯的,我從來沒有使用面向對象的編程,但試圖理解爲什麼[0]在第一個循環中被賦值後第二個循環被改變,使我絕對瘋了。希望我沒有錯。謝謝。

2

我已閱讀給定的答案,這就是我出來的。 注意,我從@pimvdb的答案開始

// return an array composed of a list of the days' number 
// from 1 month ago until today, not included 
function getAllDays() { 
var e = moment(); 
var s = moment().subtract('months', 1); 
var a = [] 
    // While the updated start date is older, perform the loop. 
    while(s.isBefore(e)) { 
    // Update the format according to moment js documentations format(). 
    a.push(s.format("MMM - DD")); 
    s = s.add('days', 1); 
    } 
return a; 
} 

隨時隨地簡單在代碼中調用該函數:

getAllDays(); 

還看到:MomentJs library

相關問題