Ошибка в разнице дат в скрипте приложения Google Sheets - PullRequest
1 голос
/ 20 сентября 2019

В Googlesheets "Sheet1" даты вводятся вручную в столбце A. Когда я вводю дату в столбец A, столбец B должен быть заполнен разницей между новой датой () и датой, только что введенной в столбце A.

До сих пор я пробовал следующий код:

function onEdit() {
     var s2=SpreadsheetApp.getActive().getSheetByName("Sheet1");
     var lastRow=s2.getLastRow();
     var entry_date =s2.getRange(lastRow, 1).getValue();
     var now = new Date();
     var diff = now-entry_date;
     s2.getRange(lastRow, 2).setValue(diff);
    }

Однако столбец B дает очень случайные результаты, и я не могу понять.Мне просто нужно, чтобы разница в дате была заполнена в столбце B той же строки.

1 Ответ

0 голосов
/ 20 сентября 2019

Результат выглядит странным для вас, потому что вы ожидаете его в днях (так, как это будет показано на листе), но сценарий показывает вам результат в миллисекундах.Чтобы получить ответ в количестве дней, попробуйте следующее:

function onEdit() {
  var s2 = SpreadsheetApp.getActive().getSheetByName("Sheet1");
  var lastRow = s2.getLastRow();
  var entry_date = s2.getRange(lastRow, 1).getValue();
  var now = new Date();
  var diff = (now-entry_date) / (24 * 60 * 60 * 1000); // Divide by number of milliseconds in a day
  s2.getRange(lastRow, 2).setValue(diff);
}

Это даст вам вывод, который выглядит как 3.4567 (дни + доля дня в миллисекундах).

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

function onEdit() {
  var s2 = SpreadsheetApp.getActive().getSheetByName("Sheet1");
  var lastRow = s2.getLastRow();
  var entry_date = s2.getRange(lastRow, 1).getValue();
  var now = new Date();
  var diff = (now-entry_date) / (24 * 60 * 60 * 1000); // Divide by number of milliseconds in a day
  diff = Math.floor(diff); // Round down
  s2.getRange(lastRow, 2).setValue(diff);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...