Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将IndexOf与日期和google工作表一起使用_Javascript_Datetime_Google Apps Script_Indexof - Fatal编程技术网

Javascript 将IndexOf与日期和google工作表一起使用

Javascript 将IndexOf与日期和google工作表一起使用,javascript,datetime,google-apps-script,indexof,Javascript,Datetime,Google Apps Script,Indexof,我正在尝试使用.indexOf()查找哪个列包含从google工作表的另一个选项卡中提取的日期。一个工作表名为Main,另一个工作表名为Data。代码如下 function FindDate() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ssProgram = ss.getSheetByName("Main"); var range = ssProgram.getRange(2,3); v

我正在尝试使用.indexOf()查找哪个列包含从google工作表的另一个选项卡中提取的日期。一个工作表名为Main,另一个工作表名为Data。代码如下

function FindDate() {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var ssProgram = ss.getSheetByName("Main");
     var range = ssProgram.getRange(2,3); 
     var programDate = range.getValue();

     var ssUpcoming = ss.getSheetByName("Data");
     var dateRange = ssUpcoming.getRange(1, 1, 1, ssUpcoming.getLastColumn());
     var HeaderFields = dateRange.getValues();

     Logger.log(HeaderFields[0]);
     Logger.log(HeaderFields[0].indexOf(programDate));


  Browser.msgBox('Greetings', "Done", Browser.Buttons.OK);

}

所有日期都是唯一的,因此只能返回1个值。通过查看数组,我知道日期是以下格式的“Sat Nov 09 23:00:00 GMT-08:00 2019”我只对日期相同感兴趣,其余的可以是任何形式,不确定如何搜索索引的这一部分

我的想法是以某种方式以正确的格式获取搜索日期,或者使用.map更改数组中的日期格式。有更简单的方法吗

谢谢

这是一份示例文件的副本

  • 您希望使用
    索引of
    HeaderFields[0]
    检索元素的索引,该索引与
    programDate
    相同
  • 您想知道当前发行脚本的原因
  • 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

如果每个值在单元格“B1:P1”的值中只有一个,那么下面的修改如何

修改点: 在脚本中使用日期对象,因为当通过
getValue()
getValues()
检索日期时,检索到的值就是日期对象。这样,
HeaderFields[0]。indexOf(programmadate)
总是
-1

修改脚本时,下面的修改如何

模式1: 在此模式中,日期作为字符串由
getDisplayValue()
getDisplayValues()
检索

修改脚本: 发件人: 致: 及

发件人: 致: 模式2: 在此模式中,日期作为日期对象检索,并且通过将日期对象转换为unix时间或ISO8601字符串数据来使用
indexOf

修改脚本: 发件人: 致: 或

发件人: 致: 注:
  • 在上述修改中,所有结果均为
    1
参考资料:

如果我误解了你的问题,而这不是你想要的方向,我道歉。

效果很好。。。我是新手,但你的两个答案都很清楚。Thanks@Robert哥特谢谢你的回复。我很高兴你的问题解决了。
var programDate = range.getValue();
var programDate = range.getDisplayValue();
var HeaderFields = dateRange.getValues();
var HeaderFields = dateRange.getDisplayValues();
Logger.log(HeaderFields[0].indexOf(programDate));
Logger.log(HeaderFields[0].map(function(e) {return e instanceof Date ? e.getTime() : e}).indexOf(programDate.getTime()));
Logger.log(HeaderFields[0].indexOf(programDate));
Logger.log(HeaderFields[0].map(function(e) {return e instanceof Date ? e.toISOString() : e}).indexOf(programDate.toISOString()));