расчет с датами и для цикла - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать цикл 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 голосов
/ 25 сентября 2018

Если start является датой, тогда ваша проблема:

start + i * day

Если используется оператор +, левый операнд (Date) является объектом, поэтомупревращается в примитив со строкой подсказки, поэтому + рассматривается как конкатенация строк, а не число.

Вы можете попробовать:

+start + i * day

, чтобы принудительно start к числу, но тогда результатом будет число, а не дата.Также это не касается вопроса продолжительности дня.Я предлагаю вам сначала скопировать начальную дату, чтобы не изменять ее, а затем увеличить ее на дубликат :

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)));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...