2010-12-03 183 views
92

給定兩個Date()對象,其中一個小於另一個,我如何在日期間每天循環?Javascript日期範圍之間的循環

for(loopDate = startDate; loopDate < endDate; loopDate += 1) 
{ 

} 

這種循環會起作用嗎?但是我怎樣才能在循環計數器中添加一天呢?

謝謝!

回答

120

這裏有一種方法可以通過使用添加一天的方式導致日期在必要時滾動到下一個月,並且不會在毫秒內搞亂。夏令時也不是問題。

var now = new Date(); 
var daysOfYear = []; 
for (var d = new Date(2012, 0, 1); d <= now; d.setDate(d.getDate() + 1)) { 
    daysOfYear.push(new Date(d)); 
} 

需要注意的是,如果你想存儲日期,你需要做一個新的(如上new Date(d)),否則你最終會與每一個存儲的日期是終值d在循環中。

9

如果的startDate和結束日期是確實的日期對象,你可以將它們轉換爲毫秒數從午夜開始1970年1月1日,是這樣的:

var startTime = startDate.getTime(), endTime = endDate.getTime(); 

,那麼你可以從一個環到另一個遞增LOOPTIME通過86400000( 1000 * 60 * 60 * 24) - 在一天的毫秒數:

for(loopTime = startTime; loopTime < endTime; loopTime += 86400000) 
{ 
    var loopDay=new Date(loopTime) 
    //use loopDay as you wish 
} 
+1

+1,給了我足夠的工作,包括工作解決方案在我的問題 – 2010-12-03 11:46:05

+5

這不起作用,當循環夏時制時間變化(在哪些地方是一個問題)。否則的好解決方案 – chadgh 2011-11-08 17:14:36

+2

你不能假設一天有`86400000`秒。這個循環對於日光節約變化和其他邊緣條件是脆弱的。 – 2012-09-30 20:25:21

-3

基於Jayarjo的回答是:

var loopDate = new Date(); 
loopDate.setTime(datFrom.valueOf()); 

while (loopDate.valueOf() < datTo.valueOf() + 86400000) { 

    alert(loopDay); 

    loopDate.setTime(loopDate.valueOf() + 86400000); 
} 
59

根據Tom Gullen的回答。

var start = new Date("02/05/2013"); 
var end = new Date("02/10/2013"); 


var loop = new Date(start); 
while(loop <= end){ 
    alert(loop);   

    var newDate = loop.setDate(loop.getDate() + 1); 
    loop = new Date(newDate); 
} 
1
var start = new Date("2014-05-01"); //yyyy-mm-dd 
var end = new Date("2014-05-05"); //yyyy-mm-dd 

while(start <= end){ 

    var mm = ((start.getMonth()+1)>=10)?(start.getMonth()+1):'0'+(start.getMonth()+1); 
    var dd = ((start.getDate())>=10)? (start.getDate()) : '0' + (start.getDate()); 
    var yyyy = start.getFullYear(); 
    var date = dd+"/"+mm+"/"+yyyy; //yyyy-mm-dd 

    alert(date); 

    start = new Date(start.setDate(start.getDate() + 1)); //date increase by 1 
} 
0

基於塔瓦雷的答案, 我不得不在末尾添加多一天,因爲週期之前

var start = new Date("02/05/2013"); 
var end = new Date("02/10/2013"); 
var newend = end.setDate(end.getDate()+1); 
var end = new Date(newend); 
while(start < end){ 
    alert(start);   

    var newDate = start.setDate(start.getDate() + 1); 
    start = new Date(newDate); 
} 
-1

這裏簡單的工作代碼砍,我

工作

var from = new Date(2012,0,1); 
 
var to = new Date(2012,1,20); 
 
    
 
// loop for every day 
 
for (var day = from; day <= to; day.setDate(day.getDate() + 1)) { 
 
     
 
    // your day is here 
 

 
}