Как в google Apps script получить несколько значений в формате .getTime из диапазона?
Нужна помощь. Пытаюсь организовать поиск строк по значению диапазона с датами в таблице гугл. Но критерий поиска это разница между текущей датой и датой из диапазона в 14 и более дней.
Пытался сделать так:
const ss = SpreadsheetApp.openById('1hvjaPuyYPQ1rm5Ew3Ig_dH1aQTu8kzYKEkebzsi6gw4');
const sheet1 = ss.getSheetByName("Лист1");
const sheet2 = ss.getSheetByName("Лист2");
const sheet3 = ss.getSheetByName("Лист3");
const millInDay = 1000 * 60 * 60 *24;
let nowDate = new Date(sheet1.getRange(1,1).getValue()).getTime();
function findRow(){
new Date(sheet3.getRange('B:B').getValues().getTime()
.forEach(
(row, i) => {
if(((nowDate - row[0])/millInDay) >= 14 ) result(i+2);
}));
}
function cresult(lastDate){
console.log(lastDate);
}
Но валидатор пишет что функция .getTime не работает в таком формате. Пытался найти ответ на просторах сети, но не преуспел. Есть ли возможность реализовать такой поиск через .getTime или нужно копать в другую сторону. Заранее благодарен
Ответы (1 шт):
В вашем варианте, скрипт должен выглядеть так:
// Допустим, что выборка вернула такой результат
// sheet1.getRange(1,1).getValue() = 08.02.2023
const dateStringNow = '08.02.2023';
let nowDate = stringToDate(dateStringNow);
function stringToDate(dateString) {
const dateValues = dateString.split('.');
return new Date(dateValues[2], dateValues[1] - 1, dateValues[0], 0,0,0,0,0).getTime();
}
// Допустим это то что выбралось из sheet3.getRange('B:B').getValues()
const datas = ['11.01.2023', '22.02.2018', '01.12.2021', '01.02.2023'];
function findRow() {
datas.forEach((item, index) => {
const colDate = stringToDate(item);
if (nowDate - colDate > 86400000 * 14) {
// Больше 14 дней
console.log('Больше', item);
} else {
// Если меньше
console.log('меньше', item)
}
})
}
findRow()
Код для google sheets(При условии что sheet3.getRange('B:B').getValues() возвращает массив элементов):
let nowDate = stringToDate(sheet1.getRange(1,1).getValue());
function stringToDate(dateString) {
const dateValues = dateString.split('.');
return new Date(dateValues[2], dateValues[1] - 1, dateValues[0], 0,0,0,0,0).getTime();
}
function findRow() {
sheet3.getRange('B:B').getValues().forEach((item, index) => {
const colDate = stringToDate(item);
if (nowDate - colDate > 86400000 * 14) {
// Больше 14 дней
console.log('Больше', item);
} else {
// Если меньше
console.log('меньше', item)
}
})
}
findRow()
P.S. Если вам надо взять дату "сегодня", то не обязательно выбирать дату из ячейки, можно сделать так new Date().getTime() и вернется текущее время
UPD: Т.к. возвращаемое значение и так имеет формат Date, можно отказаться от функции преобразования строки в дату:
let nowDate = sheet1.getRange(1,1).getValue().getTime();
function findRow() {
sheet3.getRange('B:B').getValues().forEach((item, index) => {
if (nowDate - item[0].getTime() > 86400000 * 14) {
// Больше 14 дней
console.log('Больше', item);
} else {
// Если меньше
console.log('меньше', item)
}
})
}
findRow()