Попробуйте:
Я обнаружил несколько проблем с вашим текущим кодом.Во-первых, ваш фильтр не работал, потому что он не вычислял временную дату.Я думаю, что черты вызывали проблемы для конструктора Date ().В любом случае, я внес в него несколько изменений, и теперь вы можете ясно видеть диапазон дат, посмотрев объявления для daysAgo
и daysLater
.У них есть -2 и +15 в конце каждой строки, и они контролируют ваш временной интервал для данных относительно текущей даты.
Вам больше не нужно отменять смещение () строки конца заголовка, потому что я пропустил в цикле фильтра.Фильтр сохраняет строку, если возвращаемое значение равно true, и удаляет строку, если возвращаемое значение равно false.
Также вам вообще не нужно использовать activ ().Я думаю, что это остаток пользователей, которые начали изучать свой код из макросов.
function FiveThirtyEight() {
var ss = SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Import CSV Data');
var rg=sh.getRange(1, 1, sh.getMaxRows(), sh.getMaxColumns());
rg.clear({contentsOnly:true});
var url="https://projects.fivethirtyeight.com/soccer-api/club/spi_matches.csv";
var data=UrlFetchApp.fetch(url).getContentText();
var csvA=Utilities.parseCsv(data);
var now=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate());
var daysAgo=new Date(now.getFullYear(),now.getMonth()+1,now.getDate()-2);
var daysLater=new Date(now.getFullYear(),now.getMonth()+1,now.getDate()+15);
var values=csvA.filter(function(e, i) {
if(i>0) {
var tA=e[0].split('-');//split on dashes to get FullYear,month and date
var temp=new Date(tA[0],tA[1],tA[2]);
return temp.getTime() >= daysAgo.getTime() && temp.getTime()<=daysLater.getTime();//this keeps data within the desired date range
}else{
return true;
}
});
sh.getRange(1, 1, values.length, values[0].length).setValues(values);
sh.getRange('Import CSV Data!H:J').setNumberFormat('0.00%');
}