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

时间:2020-05-11 10:46:20

标签: date if-statement google-apps-script google-sheets google-sheets-macros

您好,我想将列与日期进行比较(即“推荐日期”列)image of column 今天,这就是我所拥有的

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 个答案:

答案 0 :(得分:1)

问题

  1. searchRange.getValues()产生一个二维数组。因此dates[0][0]指向日期,而dates[0]指向数组。
  2. var dates = searchRange.getValues();在循环内部被重复调用,理想情况下应在外部调用一次,因为值不会改变;在循环中调用它既昂贵又多余
  3. for (i=0;i<range.getLastRow();i++){如果遵循第2点,则可以用i<dates.length替换条件
  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

用以下内容替换循环-

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

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