[英]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.