将数据与当前日期 google 脚本进行比较

Compare data with present date google script

您好,我想将列与日期进行比较(即 "Referral Date" 列) 今天,这就是我所拥有的

function newF(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Worksheet');
var range = ss.getDataRange();
  var headers = range.getValues()[0];
  var colIndex = headers.indexOf("Referral Date");
  var today = new Date();
var searchRange = ss.getRange(2,colIndex+1,ss.getLastRow()-1);
for (i=0;i<range.getLastRow();i++){
  var dates = searchRange.getValues();
      if (today.valueOf()>dates.valueOf()){
        updatelFilter()
      } else{
        SpreadsheetApp.getUi().alert('Future Date Error');
      break;
    }
  }
}

我遇到的问题是,无论列中的日期(推荐日期)如何,它都会抛出警报 未来日期错误。让我知道是否需要其他信息。

我的目标:

1) 如果日期列(推荐日期)大于当前日期:抛出警报错误,不应 运行 updateFilter

2) 如果(推荐日期)小于当前日期:运行 updateFilter 函数

问题

  1. searchRange.getValues() 生成一个二维数组。所以 dates[0][0] 指向一个日期,而 dates[0] 指向一个数组。
  2. var dates = searchRange.getValues(); 在循环内重复调用,理想情况下应该在循环外调用一次,因为值不会改变;在循环内调用它既昂贵又多余
  3. for (i=0;i<range.getLastRow();i++){条件可以替换为i<dates.length如果遵循第2点
  4. if (today.valueOf()>dates.valueOf()){ 我相信应该 dates[0] 而不是

修改代码

function newF(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Worksheet');
  var range = ss.getDataRange();
  var headers = range.getValues()[0];
  var colIndex = headers.indexOf("Referral Date");
  var today = new Date();
  var searchRange = ss.getRange(2,colIndex+1,ss.getLastRow()-1);
  var dates = searchRange.getValues().map(d=>d[0]); 

  for (i=0;i<dates.length;i++) {
    if (today.valueOf()>dates[i].valueOf()){
      updateFilter()
    } else {
      SpreadsheetApp.getUi().alert('Future Date Error');
      break;
    }
  }
}

到运行 updateFilter only if no future dates

用以下内容替换循环 -

if(dates.some(d => today.valueOf() < d.valueOf())) {
  SpreadsheetApp.getUi().alert('Future Date Error');
} else {

  for (let i=0; i<dates.length; i++) {
    updateFilter();
  }
}