用日期和for循环计算

时间:2018-09-25 06:59:24

标签: javascript date for-loop google-sheets

我正在尝试使用日期进行for循环,但它没有按计划进行。 我想做的是在单元格A1中输入开始日期,在单元格B1中输入结束日期。 然后运行一个for循环:如果startdate小于enddate,则将日期放入单元格A2中,然后转到下一列。我唯一的困扰是如何在日期中添加一天。

请参见下面的代码:

function test() 
{
  var app = SpreadsheetApp;
  var ss = app.getActive();
  var sheet = ss.getActiveSheet();
  
  var start = sheet.getRange("A1").getValue();
  var end = sheet.getRange("B1").getValue();
  var day = 3600*24*1000;
  var diff = Math.floor((end-start)/day);
  var column = 1;
  
  for(var i=0;i<=diff;i++)
  {
    sheet.getRange(2, column).setValue(start+i*day);
    column++;
  }
  
}

有人可以向我解释为什么它不起作用。 非常感谢

1 个答案:

答案 0 :(得分:0)

假设开始是一个日期,那么您的问题是:

start + i * day

在使用+运算符的情况下,左操作数(日期)是一个对象,因此被简化为带有提示字符串的原语,因此+被视为字符串连接,而不是数字

您可以尝试:

+start + i * day

强制开始为数字,但结果将是数字,而不是日期。此外,它也不处理一天的时间问题。建议您先复制开始日期,这样您就无需修改它,然后按the duplicate递增副本:

function test() {
  var app = SpreadsheetApp;
  var ss = app.getActive();
  var sheet = ss.getActiveSheet();

  var start = sheet.getRange("A1").getValue();
  start = new Date(+start);
  var end = sheet.getRange("B1").getValue();

  var column = 1;

  for (var i=0; start <= end; i++) {
    sheet.getRange(2, column++).setValue(new Date(start.setDate(start.getDate() + 1)));
  }
}