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

Date 将数据与当前日期的google脚本进行比较,date,if-statement,google-apps-script,google-sheets,google-sheets-macros,Date,If Statement,Google Apps Script,Google Sheets,Google Sheets Macros,嗨,我想比较列和日期(即“转诊日期”列) 现在,这就是我所拥有的 function newF(){ var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Worksheet'); var range = ss.getDataRange(); var headers = range.getValues()[0]; var colIndex = headers.indexOf("Referral Date"); va

嗨,我想比较列和日期(即“转诊日期”列) 现在,这就是我所拥有的

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;
    }
  }
}
函数newF(){
var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“工作表”);
var range=ss.getDataRange();
var headers=range.getValues()[0];
var colIndex=headers.indexOf(“转介日期”);
var today=新日期();
var searchRange=ss.getRange(2,colIndex+1,ss.getLastRow()-1);
对于(i=0;idates.valueOf()){
UpdateFilter()
}否则{
SpreadsheetApp.getUi().alert('未来日期错误');
打破
}
}
}
我遇到的问题是,无论列中的日期(转诊日期)如何,它都会引发警报未来日期错误。如果需要更多信息,请告诉我

我的目标:

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

2) 如果(转诊日期)小于当前日期:运行
updateFilter
function

Issues
  • searchRange.getValues()
    生成一个二维数组。所以
    dates[0][0]
    指向一个日期,而
    dates[0]
    指向一个数组
  • var dates=searchRange.getValues()
    在循环内部被反复调用,理想情况下,它应该在外部调用一次,因为值不会改变;在循环内调用它既昂贵又多余
  • (i=0;id[0]); 对于(i=0;idates[i].valueOf()){ updateFilter() }否则{ SpreadsheetApp.getUi().alert('未来日期错误'); 打破 } } } 仅在没有未来日期时运行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();
      }
    }
    
    if(dates.some(d=>today.valueOf()对于(让我=0;它有很多!!为了解释和编码,它完成了这项工作…但是它先运行
    updateFilter
    ,然后给出了一个反转的方法,我尝试了反转逻辑,但没有改变。你的意思是在运行
    updateFilter
    之前检查是否有任何日期在未来吗?是的,完全正确,并且只有在以下情况下才运行
    updateFilter
    re不是将来的日期顺便说一句,您可以使用工作表公式进行此操作。选择列并右键单击>数据验证>标准>自定义公式和类型(如果受影响的第一行是
    A2
    ),
    =A2I无法使用数据验证,因为我可能会添加/删除列,因此范围将不同,修改后的脚本会先抛出错误,然后运行
    updateFilter
    ,可能是我做错了什么不确定…我从
    替换为(i=0;i
    
    if(dates.some(d => today.valueOf() < d.valueOf())) {
      SpreadsheetApp.getUi().alert('Future Date Error');
    } else {
    
      for (let i=0; i<dates.length; i++) {
        updateFilter();
      }
    }