繁体   English   中英

使用“Java”和 Google Apps 脚本中的逻辑运算符检查列

[英]Checking Columns with Logical Operators in "Java" & Google Apps Script

编辑说明:术语java被引用,因为将 JavaScript 与 Java 混淆是 OP 问题的一部分。 这也发生在其他人身上。

我对“java”有点陌生,我将它与 Google Apps Script 一起使用,尽管这个问题似乎是基于“java”的。 我想在这里检查 2 列,如果一个日期等于今天或将来,则第二列返回 true。 不太确定为什么这不起作用。

if(new Date(data[row][2]) <= new Date() && 
(new Date(data[row][3]) >= new Date() || new Date(data[row][3]) == new Date() ))

用“==”比较两个对象时要小心,因为这只会比较对象引用,而不是同一个对象的等效性。

尝试将 .before 和 .after 命令与 Date 对象一起使用,如下所示:

Date today = new Date();
Date toCheck = new Date();

if (toCheck.after(today) || toCheck.equals(today)){

}

当使用 new Date() 时,它会将日期时间对象传递给变量(例如 Fri Oct 28 21:16:39 GMT+05:30 2016)。 因此,即使存在微秒差异,对象的时间部分也无法通过比较逻辑。 该脚本通过使用 Utilities Class 的 formatDate 方法松开时间部分,并将 Col A 日期与 Col B 进行比较,并返回其过去、现在或未来。

function compareDate(){
  var ss = SpreadsheetApp.getActive();
  var sheet= ss.getActiveSheet();

  var Date1 = sheet.getRange("A1:A"+sheet.getDataRange().getLastRow()).getValues(); //Get ColA
  var Date2 = sheet.getRange("B1:B"+sheet.getDataRange().getLastRow()).getValues(); //Get ColB

  for(var i = 1; i<sheet.getDataRange().getLastRow();i++){  //iterate through date
  var fDate1 = Utilities.formatDate(Date1[i][0], "GMT","yyyy-MM-dd"); // formatting col A date without time
  var fDate2 = Utilities.formatDate(Date2[i][0], "GMT","yyyy-MM-dd"); // formatting col B date without time

     //Comparison logic
      if(fDate1 == fDate2){
          sheet.getRange("C"+i).setValue("Present");
      }
      else if (fDate1 < fDate2){
          sheet.getRange("C"+i).setValue("Future");
      }
      else if (fDate1 > fDate2){
         sheet.getRange("C"+i).setValue("Past");
     }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM