如何在开始日期和结束日期之间创建日期数组?

时间:2017-07-12 21:27:53

标签: javascript arrays for-loop if-statement

我想创建一个从2014/0/1到2020/11/31开始的日期列表(日期用JavaScript表示)。

这是代码

   var initialTime = new Date(2014, 0, 1); 
   var endTime = new Date( 2050, 11, 31); 

   var arrTime = [];
   arrTime.push(initialTime);

   if( initialTime < endTime) {

    for( var q = initialTime; q <=  endTime; q.setDate(q.getDate() + 1)) {
          arrTime.push(q);

    }            
 }

 document.querySelector("#Time").innerHTML = arrTime;

这是代码返回的内容。这只是一个&#34; Sun Jan 01 2051 00:00:00 GMT-0500(EST)。&#34;我该如何纠正?

Image of the list

4 个答案:

答案 0 :(得分:2)

执行q.setTime( ... )时,您正在修改Date对象本身。您在每次迭代时将同一个对象推入数组,因此修改它会修改整个数组。

如果您只想要日期的字符串表示,您可以这样做:

&#13;
&#13;
let initialTime = new Date("2018-03-09Z08:00:00")
   ,endTime     = new Date("2018-03-14Z08:00:00")
   ,arrTime     = []
   ;
for (let q = initialTime; q <= endTime; q.setDate(q.getDate() + 1)) {
  arrTime.push(q.toString());
}
console.log(arrTime);
&#13;
&#13;
&#13;

或者,如果您想拥有一组实际的Date个实例:

&#13;
&#13;
let initialTime = new Date("2018-03-09Z08:00:00")
   ,endTime     = new Date("2018-03-14Z08:00:00")
   ,arrTime     = []
   ,dayMillisec = 24 * 60 * 60 * 1000
   ;
for (let q = initialTime; q <= endTime; q = new Date(q.getTime() + dayMillisec)) {
  arrTime.push(q);
}
console.log(arrTime);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您正在向阵列推送相同的内存引用,因此您所做的更改会影响所有这些内容。

尝试:

var copiedDate = new Date(q.getTime());
arrTime.push(copiedDate);

这样你总是推动一个新对象。

答案 2 :(得分:1)

首先,您无法使用==

比较两个日期

第二个问题是,每次将一个Date对象推送到数组ex时,您需要创建一个新的Date对象。 .push(new Date(q.getTime())

下一个问题是,在您推入数组之前,每次都没有正确地添加一天到最后一天

做类似

的事情

伪代码---

 var dates = [];
 while( firstDate < secondDate ){
   // this line modifies the original firstDate reference which you want to make the while loop work
   firstDate.setDate(firstDate.getDate() + 1);
   // this pushes a new date , if you were to push firstDate then you will keep updating every item in the array
   dates.push(new Date(firstDate);
 }

答案 3 :(得分:1)

var resolution = 1000, // Number of dates to capture between start and end
  results = [],        // will be populated with the for loop
  start = Date.now(),  // Set to whatever you want
  end = start + (1000 * 60 * 60 * 24), // Set to what ever you want
  delta = end - start

for (let i = 0; i < resolution; i++) {
  let t = (delta / resolution) * i
  results.push(new Date(start + t))
}

console.log(results)

直播示例:https://jsfiddle.net/5ju7ak75/1/