Google apps script 将Google工作表上的日期与Google应用程序脚本进行比较会返回不准确的布尔值

Google apps script 将Google工作表上的日期与Google应用程序脚本进行比较会返回不准确的布尔值,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我的Google Sheets电子表格中有一个约会列表,我正试图将其与明天的日期进行比较(这样我就可以在前一天发送提醒)。我当前的代码在电子表格中没有的某些日期返回true。我们周日没有预约,我目前正在周六测试,但仍然收到一些真实的价值观。我彻底搜索了电子表格,寻找可能的预订错误,但没有。然而,我注意到,当它查找日期4:24:2016(即明天)时,它将在4:14:2016日期返回true。在这一点上我几乎被难住了 function myFunction() { var sheet = Spr

我的Google Sheets电子表格中有一个约会列表,我正试图将其与明天的日期进行比较(这样我就可以在前一天发送提醒)。我当前的代码在电子表格中没有的某些日期返回true。我们周日没有预约,我目前正在周六测试,但仍然收到一些真实的价值观。我彻底搜索了电子表格,寻找可能的预订错误,但没有。然而,我注意到,当它查找日期4:24:2016(即明天)时,它将在4:14:2016日期返回true。在这一点上我几乎被难住了

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var apptDates = sheet.getRange(2, 32, sheet.getLastRow() - 1, 1).getValues();

  for (var i = 0; i <= apptDates.length; i++) {
    var apptDate = new Date(apptDates[i][0]);
    apptDate = apptDate.addHours(74);

    function dayAway(date, day) {
      return new Date(date.getTime() + day * (24 * 3600 * 1000));
    }
    Logger.log(apptDate >= dayAway(new Date(), 1));
  }
}
函数myFunction(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var apptDates=sheet.getRange(2,32,sheet.getLastRow()-1,1.getValues();
对于(变量i=0;i=dayAway(新日期(),1));
}
}

当您使用
新日期()
时,您不仅可以查看日期、月份和年份,还可以查看小时、分钟、秒和毫秒

这就是为什么你的比较不能给出结果。 只需将不需要的值设置为
0
,它就会工作。我使用了
getTime()
来比较毫秒,但是也可以使用
toString()
来比较,只有日期对象不适合检查相等性

记录器对于调试这些东西有很大帮助

代码:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var apptDates = sheet.getRange(2,6, sheet.getLastRow() - 1, 1).getValues();
  for (var i = 0; i < apptDates.length; i++) {
    var apptDate = new Date(apptDates[i][0]);
    Logger.log(apptDate.getTime()+'  ==?  '+dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
    Logger.log(apptDate.getTime() == dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
  }
}

function dayAway(date, day) {
  return new Date(date.getTime() + day * 24 * 3600 * 1000);
}
函数myFunction(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var apptDates=sheet.getRange(2,6,sheet.getLastRow()-1,1.getValues();
对于(变量i=0;i

当您使用
新日期()
时,您不仅可以查看日期、月份和年份,还可以查看小时、分钟、秒和毫秒

这就是为什么你的比较不能给出结果。 只需将不需要的值设置为
0
,它就会工作。我使用了
getTime()
来比较毫秒,但是也可以使用
toString()
来比较,只有日期对象不适合检查相等性

记录器对于调试这些东西有很大帮助

代码:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var apptDates = sheet.getRange(2,6, sheet.getLastRow() - 1, 1).getValues();
  for (var i = 0; i < apptDates.length; i++) {
    var apptDate = new Date(apptDates[i][0]);
    Logger.log(apptDate.getTime()+'  ==?  '+dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
    Logger.log(apptDate.getTime() == dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
  }
}

function dayAway(date, day) {
  return new Date(date.getTime() + day * 24 * 3600 * 1000);
}
函数myFunction(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var apptDates=sheet.getRange(2,6,sheet.getLastRow()-1,1.getValues();
对于(变量i=0;i

尝试取出utilities.formatDate部分。使用单元格值创建日期对象应足以比较日期。@Gerneio I删除了utilities.formatDate,但现在它不断返回false。当我记录这两个日期的结果时,每个日期都有一个相互矛盾的时间戳,这就是为什么我试图在没有时间的情况下格式化它。有没有一种方法可以在不比较时间的情况下比较日期?矛盾有多大?当我记录dayAway()时:[16-04-23 10:18:09:841 PDT]Tue Apr 26 12:18:09 GMT-05:00 2016当我记录apptDate时:[16-04-23 10:18:09:842 PDT]Tue Apr 26 00:00:00 GMT-05:00 2016您将其更改为:var apptDate=new Date(apptDate[I][0]);对吗?试着取出utilities.formatDate部分。使用单元格值创建日期对象应足以比较日期。@Gerneio I删除了utilities.formatDate,但现在它不断返回false。当我记录这两个日期的结果时,每个日期都有一个相互矛盾的时间戳,这就是为什么我试图在没有时间的情况下格式化它。有没有一种方法可以在不比较时间的情况下比较日期?矛盾有多大?当我记录dayAway()时:[16-04-23 10:18:09:841 PDT]Tue Apr 26 12:18:09 GMT-05:00 2016当我记录apptDate时:[16-04-23 10:18:09:842 PDT]Tue Apr 26 00:00:00 GMT-05:00 2016您将其更改为:var apptDate=new Date(apptDate[I][0]);对吗?