给定两个Date()
对象,其中一个小于另一个,我如何在日期之间每天循环?
for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{
}
这种循环会起作用吗?但是如何在循环计数器中添加一天呢?
谢谢!
给定两个Date()
对象,其中一个小于另一个,我如何在日期之间每天循环?
for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{
}
这种循环会起作用吗?但是如何在循环计数器中添加一天呢?
谢谢!
这是一种方法,通过使用添加一天的方式使日期在必要时滚动到下个月,并且不会弄乱毫秒。夏令时也不是问题。
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
循环中的最终值。
基于汤姆·古伦的回答。
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);
}
如果您允许自己使用Moment.js,我想我找到了一个更简单的答案:
// cycle through last five days, today included
// you could also cycle through any dates you want, mostly for
// making this snippet not time aware
const currentMoment = moment().subtract(4, 'days');
const endMoment = moment().add(1, 'days');
while (currentMoment.isBefore(endMoment, 'day')) {
console.log(`Loop at ${currentMoment.format('YYYY-MM-DD')}`);
currentMoment.add(1, 'days');
}
<script src="https://cdn.jsdelivr.net/npm/moment@2/moment.min.js"></script>
如果 startDate 和 endDate 确实是日期对象,您可以将它们转换为自 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 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
}