как узнать количество дней с помощью скрипта Google Apps, когда известны начало и конец - PullRequest
1 голос
/ 01 июля 2019

Используя скрипт приложений Google, я пытаюсь подсчитать количество дней между двумя определенными пользователем датами (включая начало и конец). Я пробовал несколько итераций кода, который я погуглил, но все либо завершают работу без результата, либо возвращают NaN.

Чтобы получить общую картину, у меня есть лист, который должен рассчитать количество значений для каждого календарного дня между двумя определенными пользователем датами. Я подумал, что сначала вычислю количество дней между датами, затем создам список дат с помощью другой функции, а затем вставлю вычисленное значение с помощью функции thrid.

вот где я уступил нуждающимся в помощи:

function daysInRange() {
  var a = new Date(shtCalc.getRange(2, 3)); // dd/mm/yyyy, 01/02/2019
  var b = new Date(shtCalc.getRange(2, 6)); // dd/mm/yyyy, 28/02/2019
  var days = Math.floor((a-b)/(24*3600*1000));
  Logger.log(days);
}

Я также пробовал:

  • добавление .valueOf() и .getTime() в конец диапазонов shtCalc
  • без переноса диапазона в new Date()

Я ожидал, что Logger.log(days); вернет 28, но вместо этого я получу NaN. пожалуйста, помогите.

1 Ответ

1 голос
/ 01 июля 2019

Задача

Если вы разобьетесь, что происходит, вы увидите, что a-b в вашем случае пытается выполнить математическую операцию над двумя экземплярами класса Range, таким образом, возвращает NaN. Затем NaN делится на 24*60*60*1000, что также NaN и, наконец, Math.floor(), вызванный на NaN, также возвращает NaN:)

Решение

Вам необходимо явно извлечь значения из Range, чтобы иметь возможность работать с ними. Класс SpreadsheetApp имеет два удобных метода для этого: getValue(), который извлечет значение верхней левой ячейки Range, и getValues(), который извлечет все значения в два Array структурированный так:

[ //pseudo-code; row1: [ col1, colN ], rowN: [ col1, colN ] ]

Sample

С небольшой модификацией ваш код должен выглядеть так:

function daysInRange() {
  var a = new Date( shtCalc.getRange(2, 3).getValue() );
  var b = new Date( shtCalc.getRange(2, 6).getValue() );
  var days = Math.floor((a-b)/(24*3600*1000));
  Logger.log(days);
}

Полезные ссылки

  1. getValue() метод ссылка ;
  2. getValues() метод ссылка ;
...