Google Apps Script判断日期是否落在两日期区间且忽略时间
问题原因
你当前的对比逻辑是基于包含时分秒的完整时间戳计算,即便是同一天的两个日期,只要时间不同,getTime()返回的数值就会存在差异,导致匹配失败。
解决方法
新增一个清除日期对象时间部分的工具函数,将所有参与对比的日期统一转换为当天0点的时间戳后再做比较,即可忽略时间维度只对比日期。
步骤1:新增日期时间清零函数
// 传入Date对象,返回该日期当天0点的毫秒时间戳 function getPureDateTimestamp(date) { const pureDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); return pureDate.getTime(); }
步骤2:修改原有对比逻辑
先将fromdt、todt的时间清零,再在循环中把要对比的calldate(也就是vA[k][0])也做时间清零后再判断区间:
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}; // 把起止日期的时间部分清零 const fromTs = getPureDateTimestamp(fromdt); const toTs = getPureDateTimestamp(todt); 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++){ // 把待对比的日期时间清零后再比较 const callDateTs = getPureDateTimestamp(vA[k][0]); if (vA[k][3] == name && callDateTs >= fromTs && callDateTs <= toTs){ // 原有业务逻辑 //do something } } }
注意事项
- 确保你从表格中通过
getValue()获取的fromdt、todt、calldate都是谷歌表格识别的日期格式,返回的是原生Date对象而非字符串,如果是字符串格式需要先通过new Date(日期字符串)转换为日期对象再调用工具函数。
内容的提问来源于stack exchange,提问作者arul selvan
相关产品推荐
相关产品推荐

