Google Script Apps Editor - Расчет разницы дней - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь рассчитать разницу в днях между двумя датами

Это будет, NOW () - дата, указанная в данных. В приведенном ниже примере (2019-03-08 - 2018-10-31) = 128 дней для первой строки

Dates      Days Regions
2018-10-31  128 Alberta
2018-10-31  128 Alberta
2018-11-8   120 Alberta
2018-11-18  110 Alberta

набор данных выглядит так, как указано выше

Дело в том, что я пытаюсь рассчитать это значение всякий раз, когда пользователь обновляет "Даты"колонка.

Ниже приведен код, который я пробовал

function dategenerator() {
  const numberofHeaderRows=1
  var spreadsheet = SpreadsheetApp.getActiveSheet()
  var range = spreadsheet.getRange("A:A")
  var legitrange = spreadsheet.getDataRange().getValues()
  var rangeValuesInclHeaders = range.getValues()
  var rangeValuesExclHeaders = rangeValuesInclHeaders.slice(numberofHeaderRows)
  var dates=rangeValuesExclHeaders.map(function(row){return row[0]})

  for (var rowNumber=numberofHeaderRows;rowNumber<rangeValuesInclHeaders.length;rowNumber++){
    var row = rangeValuesInclHeaders[rowNumber]
    if (row[0]!==""){

    var dates = new Date(row[0])
    var datesnew = new Date()
    var t1 = datesnew.getTime()
    var t2 = dates.getTime()
    var diffInDays = Math.floor((t1 - t2)/(1000*60*60*24))
      Logger.log(diffInDays)
      spreadsheet.getRange(1,2,legitrange.length,1).setValue(diffInDays);
    }
  }
}

Я вижу правильные значения в "diffInDays". Однако, это только получение последнего значения, как показано ниже ...

Dates      Days Regions
2018-10-31  110 Alberta
2018-10-31  110 Alberta
2018-11-8   110 Alberta
2018-11-18  110 Alberta

Как мы получим эту работу правильно, чтобы она могла добавить вычисленное значение к нужной строке дат?

1 Ответ

0 голосов
/ 08 марта 2019

Рассчитывать дни всякий раз, когда изменяется первый столбец

function diffInDays(Start,End)
{
  if(Start && End)
  {
    var second=1000;
    var minute=60*second;
    var hour=minute*60;
    var day=hour*24;
    var t1=new Date(Start).valueOf();
    var t2=new Date(End).valueOf();
    var d=t2-t1;
    var days=Math.floor(d/day);
    return days;
  }
  else
  {
    throw('Invalid Inputs');
  }
}

function onEdit(e) {
  if(e.range.getSheet().getName()!='SheetName'){return;}//add sheetName
  if(e.range.columnStart==1 && e.value){
    e.range.offset(0,1).setValue(diffInDays(e.value,new Date());
  }
}

Отформатируйте первый столбец как Datetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...