簡體   English   中英

電子表格 Google 腳本中的較早日期

[英]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如建議的那樣,提供了更多信息並添加了更多代碼。

獲取列表最后n天的行

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM