首页 > 解决方案 > 日期在另外两个日期之间

问题描述

我从日期为 calldate = 29/08/2021 09:30:00 的工作表中获取值()

我从表格中得到另外两个日期:fromdt 和 todt

我想检查 calldate 是否在 fromdt 和 todt 之间

我试过了

function onFormSumbit(e) {
  //Timestamp   1Name   1From Date  3.From Time 4To Date    5To Time    6Reason                     
  var name = e.source.getActiveSheet().getRange(e.range.rowStart,2).getValue();
  var fromdt = e.source.getActiveSheet().getRange(e.range.rowStart,3).getValue();
  var fromtime = e.source.getActiveSheet().getRange(e.range.rowStart,4).getValue();
  var todt = e.source.getActiveSheet().getRange(e.range.rowStart,5).getValue();
  var totime = e.source.getActiveSheet().getRange(e.range.rowStart,6).getValue();
  var reason = e.source.getActiveSheet().getRange(e.range.rowStart,7).getValue();
  if ( todt=="") {todt=fromdt} ;
  if ( fromtime=="") {fromtime=9}   ;
  if ( totime=="") {totime=19} ;
  var empss = SpreadsheetApp.openById("xxx"); // service calls 
  var sltsht = empss.getSheetByName("Slots");
  var vA =sltsht.getDataRange().getValues();//first column is a date with some time
  for (k=1;k<vA.length;k++){
     if (vA[k][3]==name && vA[k][0].getTime() >= fromdt.getTime() && vA[k][0].getTime() <= todt.getTime()){
//do something
}
}

我只想比较日期。我想忽略时间。

上面的代码无法显示匹配的记录。

标签: javascriptdatetimegoogle-apps-scriptgoogle-sheets

解决方案


我检查了工作表和脚本中的时区(通过切换到旧版编辑器)。两者都是一样的。

const dateOnly = new Date(dateAndTime.toISOString().slice(0,10))

不工作。结果是获取前一天的数据。

然后我尝试了

const fromdt = new Date(lvvals[0][1].setHours(0,0,0,0));

它工作得很好。

谢谢

我在下面给出最终代码

function test(){
  var ss=SpreadsheetApp.getActive();
  var lvvals = ss.getActiveSheet().getRange(12,2 , 1, 7  ).getValues();
  //const fromdt = new Date(lvvals[0][1].toISOString().slice(0,10)); //returned the previous date
  const fromdt = new Date(lvvals[0][1].setHours(0,0,0,0)); // worked correctly
  if ( lvvals[0][3]=="") {lvvals[0][3]=lvvals[0][1]} ;
  //const todt = new Date(lvvals[0][3].toISOString().slice(0,10));
  const todt = new Date(lvvals[0][3].setHours(0,0,0,0));
  var empss = SpreadsheetApp.openById("xxx"); // service calls 
  var sltsht = empss.getSheetByName("Slots");
  var vA =sltsht.getDataRange().getValues();
  for (k=1;k<vA.length;k++){
     //sltdt = new Date(vA[k][0].toISOString().slice(0,10));
     sltdt = new Date(vA[k][0].setHours(0,0,0,0));
     if (vA[k][3]==lvvals[0][0] && sltdt.getTime() >= fromdt.getTime() && sltdt.getTime() <= todt.getTime()){
     // do something
    }
  }
}

推荐阅读