分配给数组的日期(和下一个日期)似乎不起作用

时间:2015-06-29 09:10:56

标签: google-apps-script

这对我来说是全新的, 如果我给数组记录分配一个日期,似乎没问题,但如果我将第二天分配到下一条记录,系统也会改变第一条:O:O:O 等等...

我无法发布图片,只是尝试调试...

function myFunction() {

  var test=[];
  var startDate  = new Date(2014,11, 01);  //01 dic 2014
  var nextDate   = startDate ;

  for (i=0; i<=10; i++){
    test.push(nextDate); 
    nextDate.setDate(nextDate.getDate()+1);
  }

1 个答案:

答案 0 :(得分:1)

您一直在推送相同的日期对象。 尝试如下:

function myFunction() {
  var test=[];
  var startDate  = new Date(2014,11, 01);  //01 dic 2014
  var nextDate   = startDate ; 
  for (i=0; i<=10; i++){
    var newDate = new Date(nextDate.setDate(nextDate.getDate()+1));
    test.push(newDate); 
  }
  Logger.log(JSON.stringify(test));
}

enter image description here

编辑:

为了使事情更加清晰,并且在整个脚本执行过程中显示nextDate变量仍然相同,这里有一个示例,显示原始代码中发生的情况。我在循环中记录了nextDate的值,然后记录了结果数组。您确实可以看到,当它们在循环中发生变化时,数组中的所有值都是相同的(并且数组中的值是循环中的最后一个值)。

现在让我们再次更改nextDate并重新检查数组,所有值都会再次更改,这实际上是因为我们有一个唯一的对象。

下面的错误代码:

function myFunction2() {
  var test=[];
  var startDate  = new Date(2014,11, 01);  //01 dic 2014
  var nextDate   = startDate ;
  for (i=0; i<=10; i++){
    test.push(nextDate); 
    Logger.log(nextDate);
    nextDate.setDate(nextDate.getDate()+1);
  }
  Logger.log(test);
  nextDate.setDate(0);
  Logger.log(test);
}

导致记录器:

enter image description here