javascript - 日期在另外两个日期之间
问题描述
我从日期为 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
}
}
我只想比较日期。我想忽略时间。
上面的代码无法显示匹配的记录。
解决方案
我检查了工作表和脚本中的时区(通过切换到旧版编辑器)。两者都是一样的。
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
}
}
}
推荐阅读
- c - C 执行时间
- python - 使用 python 在 jira 中创建问题时出现 500 错误
- jenkins - 如何将自定义 allure 插件与 jenkins allure 插件集成
- html - delegate.replace() 不适用于 Array List Grails 2.3.8
- c - 在 STM32F4 发现上配置 SPI
- data-structures - 如果我们将 Deque 声明为允许双方输入和输出的通用 Deque,那么技术错误是什么?
- laravel-5 - 打开站点根目录时如何设置vue组件
- shell - 我想使用 shell 脚本将所有文件从一个文件夹移动到另一个文件夹
- amazon-web-services - Amazon SNS 推送通知特殊字符
- mongodb - 使用查找在 jenseger mongodb 中添加 where 条件