[英]Older date in Spreadsheets Google Script
我正在嘗試獲取 G 驅動器文件夾中新創建文件的信息。 每次我運行我的程序時,輸出應該只引用文件夾中的新文件。 D 列將包含創建日期。 所以我讀取了D列的最后一個值,我們稱之為DX; DX 會有最新文件的創建日期(因為我在程序的最后一行對它們進行了排序)。 然后我將 DX 與我文件夾中所有文件的創建日期進行比較。 只有 files.creationDate > DX 是我需要的。 我設法想出了:
var folder = DriveApp.getFolderById('1gsXZWKSPxAsFiyuaMMNTkg6n_4p9HOeU');
var contents = folder.getFiles();
//get value of D2
var control_cell = SpreadsheetApp.getActiveSheet().getRange('D2');
//get last non blank value in the D column and assign it to variable lastTimeCreated
var values = SpreadsheetApp.getActiveSheet().getRange('D:D').getValues().flat().filter(String);
var [lastTimeCreated] = values.slice(-1)
//If D2 is empty assign an old date to lastTimeCreated
if (control_cell.isBlank()){
lastTimeCreated = '1/10/2020 12:00:00'
}
var varFile;
var varTime;
var dataRows = [];
let i = 0;
while(contents.hasNext()){
varFile = contents.next();
varTime = varFile.getDateCreated().toLocaleString();
if(new Date(varTime).getTime() >= new Date(lastTimeCreated).getTime() && varOwner.includes(actualSheetName)){
dataRows[i] = [varTime];
i++;
}
else{
continue
}
}
const sortedRows = dataRows.sort((a, b) => new Date(a[3]) - new Date(b[3]));
問題是最后一個if
使用new Date(varTime).getTime() >= new Date(lastTimeCreated).getTime()
語句。 我認為lastTimeCreated
不能被解釋為 Date ,因此它們不能被比較。 我知道varTime
不是問題,因為該程序的最后一行運行良好。 也許問題是兩個日期的格式日期(?)。 我也嘗試使用Date.parse()
來處理這兩個變量,但它沒有奏效。
任何幫助都會受到廣泛贊賞。
編輯日期格式是這樣的:1/10/2020 12:00:00
編輯 2如建議的那樣,提供了更多信息並添加了更多代碼。
D列是日期
function getLastNDaysOfRows(n=2) {
const ss = SpreadsheetApp.getActive();
const ash = ss.getActiveSheet();
const vs = ash.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
let v = vs.slice();
v.sort((a,b) => {
let dta = new Date(a[3])
let vA = new Date(dta.getFullYear(),dta.getMonth(),dta.getDate()).valueOf();
let dtb = new Date(b[3]);
let vB = new Date(dtb.getFullYear(),dtb.getMonth(),dtb.getDate()).valueOf();
return vB-vA;
});
dtn = new Date(v[0][3]);
dtvt = new Date(dtn.getFullYear(),dtn.getMonth(),dtn.getDate() - n).valueOf();
let ds = vs.map(r => {
let d = new Date(r[3])
let dv = new Date(d.getFullYear(),d.getMonth(),d.getDate()).valueOf()
if(dv >= dtvt) {
return r;
}
})
Logger.log(JSON.stringify(ds));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.