我在用日期填充数组时遇到问题。

我正在尝试获取过去的12个月+当前的月份,总共给了我13个月的时间,我想将其添加到选择列表中。

文档准备好后,我将使用日期填充数组。

我试过直接在PopulateDates()中而不是datesArray中填充dates数组,但是在向函数外的控制台进行写操作时,仍然具有相同的效果。

我在这里想念什么?



$(document).ready(function() {
  var dates = new Array();
  dates = PopulateDates();

  for (var i = 0; i < dates.length; i++) {
    console.log("Date " + i + ": " + dates[i]);
    // This returns April 01 2020 for each field
  }
});

function PopulateDates() {
  var datesArray = new Array();

  var startDate = new Date();
  startDate.setUTCFullYear(startDate.getUTCFullYear() - 1, startDate.getUTCMonth(), 1);

  var dateIterator = startDate;

  for (var i = 0; i < 13; i++) {
    datesArray.push(dateIterator);
    console.log("Added: " + dateIterator);
    //This returns different dates correctly.
    //Starting from March 2019 to March 2020

    dateIterator.setMonth(dateIterator.getMonth() + 1);
  }

  return datesArray;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

最佳答案

发生这种情况是因为同一对象被推入了数组。克隆迭代器,然后将其推入数组。

let clone = new Date(dateIterator.getTime());
datesArray.push(clone);

09-17 00:53