Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript循环遍历日期范围_Javascript_Loops_Date_Iteration_Date Range - Fatal编程技术网

使用JavaScript循环遍历日期范围

使用JavaScript循环遍历日期范围,javascript,loops,date,iteration,date-range,Javascript,Loops,Date,Iteration,Date Range,给定两个Date()对象,其中一个小于另一个,如何在日期之间每天循环 for(loopDate = startDate; loopDate < endDate; loopDate += 1) { } for(loopDate=startDate;loopDate

给定两个
Date()
对象,其中一个小于另一个,如何在日期之间每天循环

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

}
for(loopDate=startDate;loopDate
这种循环行得通吗?但是我怎样才能在循环计数器中添加一天呢


谢谢

如果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
}
for(loopTime=startTime;loopTime
根据Jayarjo的回答:

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

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

    alert(loopDay);

    loopDate.setTime(loopDate.valueOf() + 86400000);
}
var loopDate=新日期();
loopDate.setTime(datFrom.valueOf());
while(loopDate.valueOf()
这里有一种方法可以做到这一点,它可以利用添加一天的方式,在必要时将日期滚动到下一个月,而不会造成毫秒的混乱。夏令时也不是问题

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));
}
var now=newdate();
var daysOfYear=[];

对于(var d=新日期(2012,0,1);d基于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);
}
var开始=新日期(“2013年5月2日”);
var结束=新日期(“2013年10月2日”);
var循环=新日期(开始);
而(循环
var start=新日期(“2014-05-01”);//yyyy-mm-dd
var end=新日期(“2014-05-05”);年月日
而(start=10)?(start.getMonth()+1):'0'+(start.getMonth()+1);
var dd=((start.getDate())>=10)?(start.getDate()):“0”+(start.getDate());
var yyyy=start.getFullYear();
变量日期=dd+“/”+mm+“/”+yyyy;//yyyy-mm-dd
警报(日期);
开始=新日期(start.setDate(start.getDate()+1));//日期增加1
}
根据塔巴雷的回答, 我不得不在最后多加一天,因为之前的周期已经缩短了

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);
}
var开始=新日期(“2013年5月2日”);
var结束=新日期(“2013年10月2日”);
var newend=end.setDate(end.getDate()+1);
var end=新日期(newend);
while(开始<结束){
警报(启动);
var newDate=start.setDate(start.getDate()+1);
开始=新日期(newDate);
}

这里是简单的工作代码,对我有用

var from=新日期(2012,0,1);
var to=新日期(2012年1月20日);
//每天循环一次

对于(var day=from;day我想我找到了一个更简单的答案,如果您允许自己使用:

//循环过去五天,包括今天
//你也可以循环选择任何你想要的日期,主要是为了
//使此代码段不具有时间意识
const currentMoment=矩()。减去(4,'天');
const endMoment=moment().add(1,'天');
while(currentMoment.isBefore(endMoment,'day')){
log(`Loop at${currentMoment.format('YYYY-MM-DD')}`);
当前时刻。添加(1,‘天’);
}

如果您想要一种有效的毫秒方式:

var daysOfYear = [];
for (var d = begin; d <= end; d = d + 86400000) {
    daysOfYear.push(new Date(d));
}
var daysOfYear=[];

对于(var d=begin;d让我们假设您从UI获得了开始日期和结束日期,并将其存储在控制器的scope变量中

然后声明一个数组,该数组将在每次函数调用时重置,以便在下次调用函数时可以存储新数据

var dayLabel=[]

请记住使用新日期(您的起始变量),因为如果不使用新日期并直接将其分配给变量,setDate函数将在每次迭代中更改原始变量值`

for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) {
                dayLabel.push(new Date(d));
            }

for(var d=new Date($scope.startDate);d+1,给了我足够的工作时间,我在问题中包括了工作解决方案这在循环经过夏令时变更时不起作用(在存在问题的区域)。否则,这是一个很好的解决方案。您不能假设一天中有
86400000
秒。此循环对于夏令时更改和其他边缘条件非常脆弱。除了DST,另一个边缘条件是“闰秒”。一秒钟的差异并不重要-转换为毫秒的日期对应于给定日期的第一秒钟。一秒钟的错误,您在前一天着陆。对此的一个注释是,小于比较优先于!=,因为当由于某种原因在多个月内循环时!=比较从不触发。除了DST之外,还有另一个边缘条件是“闰秒”。一秒的差异并不重要-转换为毫秒的日期对应于给定日期的第一秒。一秒错误,您在前一天着陆。比所有其他答案可读性强得多。每个循环加上86400000毫秒,可读性不强。注意夏令时。d.getDate()当d.getDate()=GMT N和d.getDate()+1=GMT N-1 d.getDate()+1两次返回月的同一天时,为什么定义
now
new Date()
。调用
Date
而不使用
new
构造函数只会给您一个日期字符串,您可以将其转换为日期对象吗?对我来说,
新日期(2012,0,1);
拾取的日期不正确(前一天),
新日期(Date.UTC(2012,0,1))
效果很好。我在互联网上尝试了多种解决方案。奇怪的是它有时会跳过。比如1.12、2.12、3.12、5.12…(注意4.12被跳过)我不知道为什么会发生这种情况……有人遇到这个问题并找到了解决方案吗?@DevAllanPer nothing,
Date
是一个全局对象
for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) {
                dayLabel.push(new Date(d));
            }