Расчёт разницы во времени между двумя ячейками
С программирование на Google apps script знаком очень поверхностно, на основе своих знаний написал такой код (сразу скажу работает не корректно):
function ResponseTime(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetName();
var range = sheet.getActiveRange();
var data = range.getValues();
if(sheetName == "Вопросник" && range.getColumn() == 17){
for (var i=0;i < data.length;i++){
if (data[i][0]>0) {
(data[i][0])=Date.parse(data[i][0]);
var time1 = (data[i][0])}
else {
}
}
}
if(sheetName == "Вопросник" && range.getColumn() == 18){
for (var i=0;i < data.length;i++){
if (data[i][0]>0) {
(data[i][0])=Date.parse(data[i][0]);
var time2 = (data[i][0])}
else {
}
}
for (var i=0;i < data.length;i++){
if (data[i][0]>0 && time2>0) {
let date = new Date(time2);
range.offset(i,+1,1,1).setValue(date.getHours()+':'+date.getMinutes());}
else {
}
}
}
}
У меня в таблице в столбцах 17 и 18 идут две даты, как рассчитать разницу между ними особо не нашел, поэтому решил сначала из обеих ячеек получить таймстамп с помощью Date.parse(str), далее уже найти разницу в миллисекундах и преобразовать ее в "часы:минуты". Но в итоге что планировал получить не удалось. Я так понимаю основная проблема с методом .getColumn() он позволяет работать с определенным диапазоном, то есть только с одним столбцом и мне не подходит. Подскажите на какой метод его заменить? и также я предполагаю что много лишнего написал в коде, может его как-то можно упростить, что-то выбросить? Возможно я изначально пошел не по тому пути и все можно реализовать намного проще? Буду рад любым предложениям.
Ответы (1 шт):
Время находится в столбцах A & B, Разница записывается в столбец C.
function diffDates() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('Вопросник'); // ss.getActiveSheet();
sheet.getRange('C:C').setValues(
sheet
.getRange('A:B')
.getValues()
.map(function(row){
if (row[0] && row[1]) {
return [msToTime(Math.abs(row[0] - row[1]))];
}
else return [''];
})
);
}
function msToTime(duration) {
var seconds = Math.floor((duration / 1000) % 60),
minutes = Math.floor((duration / (1000 * 60)) % 60),
hours = Math.floor((duration / (1000 * 60 * 60)) % 24);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return hours + ":" + minutes + ":" + seconds;
}
Функция msToTime взята отсюда