Javascriptdate范围之间的循环
给定两个Date()对象,其中一个比另一个less,我如何在date之间每天循环?
for(loopDate = startDate; loopDate < endDate; loopDate += 1) { }
这种循环会起作用吗? 但是我怎样才能在循环计数器中添加一天呢?
谢谢!
这里有一种方法可以通过使用添加一天的方式来使date在必要时翻转到下一个月,而不会在毫秒之间搞乱。 夏令时也不是问题。
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)); }
请注意,如果要存储date,则需要创build一个新new Date(d)
(如上面的new Date(d)
),否则,最终每个存储的date都是循环中d
的最终值。
根据汤姆Gullen的答案。
var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); while(start < end){ alert(start); var newDate = start.setDate(start.getDate() + 1); start = new Date(newDate); }
最好的祝福。
如果startDate和endDate确实是date对象,则可以将它们转换为自1970年1月1日午夜以来的毫秒数,如下所示:
var startTime = startDate.getTime(), endTime = endDate.getTime();
然后你可以从一个循环到另一个递增循环时间86400000(1000 * 60 * 60 * 24) – 一天中的毫秒数:
for(loopTime = startTime; loopTime < endTime; loopTime += 86400000) { var loopDay=new Date(loopTime) //use loopDay as you wish }
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 }
基于Tabare的答案,我不得不再增加一天,因为这个循环之前被切断了
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); }
根据Jayarjo的回答:
var loopDate = new Date(); loopDate.setTime(datFrom.valueOf()); while (loopDate.valueOf() < datTo.valueOf() + 86400000) { alert(loopDay); loopDate.setTime(loopDate.valueOf() + 86400000); }
更好的方法是将date转换为数字数据types,然后使用增量为86400000的循环