2010-12-03 134 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 
 

 
}