Google apps script 将日期字符串转换为日期;“非硬编码日期”;

Google apps script 将日期字符串转换为日期;“非硬编码日期”;,google-apps-script,google-sheets,spreadsheet,Google Apps Script,Google Sheets,Spreadsheet,1) 下面的代码从文件夹中的几个工作表中提取数据,并将所有日期合并到一个工作表中 2) 在此组合图纸选项卡中,具有“最大日期”功能 var maxDate = SS.getRange("MaxDate!A1").getValue(); 3) 文件夹中的图纸具有如下日期和时间格式 08-09-2019上午10:59 4) 我让脚本循环所有工作表,并将这些工作表中的日期与组合工作表中的max date函数进行比较,如果日期大于max date,则获取这些数据,因此基本上它会获取最新的数据 5) 问

1) 下面的代码从文件夹中的几个工作表中提取数据,并将所有日期合并到一个工作表中

2) 在此组合图纸选项卡中,具有“最大日期”功能

var maxDate = SS.getRange("MaxDate!A1").getValue();
3) 文件夹中的图纸具有如下日期和时间格式
08-09-2019上午10:59

4) 我让脚本循环所有工作表,并将这些工作表中的日期与组合工作表中的max date函数进行比较,如果日期大于max date,则获取这些数据,因此基本上它会获取最新的数据

5) 问题是,当我执行以下代码时,它将日期
08-09-2019 10:59 AM
读取为字符串并返回
1970-00-01
,我试图将日期变量放入
new date()中
将其转换为日期,但我仍然有相同的问题,当我删除
新日期()时它告诉我错误
找不到方法formatDate(string,string,string)

因此我需要帮助将此日期变量
fileDate
转换为实际日期

fileHeaders=fileSheet.getRange(1,1,1,fileSheet.getLastColumn()).getValues();
dateCol=fileHeaders[0].indexOf('Creation date and time')+1;
fileDate=新日期(fileSheet.getRange(2,dateCol,1,1).getValue());
dateFormat=Utilities.formatDate(文件日期,“GMT+2”,“yyyy-mm-dd”);
函数组合数据(){
var folder=DriveApp.getFolderById(“17eFdVXdVE3sxemcC_qO0QfY71zKU4YLh”);
var filesIterator=folder.getFiles();
var SS=SpreadsheetApp.getActiveSpreadsheet();
var maxDate=SS.getRange(“maxDate!A1”).getValue();
var rDS=SS.getSheetByName(“原始数据”);
var oriColHeaders=rDS.getRange(1,1,1,SS.getSheetByName('Raw Data').getMaxColumns()).getValues();
var文件;
var文件类型;
var文件日期;
数据格式;
var-ssID;
var组合数据=[];
var数据;
var柱形导柱;
var-colindex;
while(file迭代器.hasNext()){
file=file迭代器.next();
filetype=file.getMimeType();
var fileSheet=SpreadsheetApp.open(file.getSheets()[0];
var fileHeaders=fileSheet.getRange(1,1,1,fileSheet.getLastColumn()).getValues();
var dateCol=fileHeaders[0]。indexOf('Creation date and time')+1;
fileDate=新日期(fileSheet.getRange(2,dateCol,1,1).getValue());
dateFormat=Utilities.formatDate(文件日期,“GMT+2”,“yyyy-mm-dd”);
Logger.log(日期格式);
如果(文件类型===“应用程序/vnd.google apps.spreadsheet”&&dateFormat>maxDate){
ssID=file.getId();
columnsHeaders=SpreadsheetApp.openById(ssID).getSheets()[0].getRange(1,1,1,SpreadsheetApp.openById(ssID).getSheets()[0].getMaxColumns()).getValues();
对于(var i=columnsHeaders[0]。长度-1;i>=0;i--)
if(oriColHeaders[0].indexOf(columnsHeaders[0][i])=-1{
SpreadsheetApp.open(file).getSheets()[0].deleteColumn(i+1);
}
}
data=SpreadsheetApp.openById(ssID).getSheets()[0].getRange(“A2:AG”+SpreadsheetApp.openById(ssID).getSheets()[0].getLastRow()).getValues();
combinedData=combinedData.concat(数据);
}
var activeWS=SS.getSheetByName(“原始数据”);
var activeWSLR=activeWS.getRange(“S1:S”).getValues().filter(String).length;
如果(combinedData.length>0){
getRange(activeWSLR+1,1,combinedData.length,combinedData[0].length).setValues(combinedData).sort(19);
}
否则{
SpreadsheetApp.getUi().alert('没有新文件')
}  
}
这似乎是一个bug! 根据应用程序脚本文档,联系人服务除外:

应用程序脚本中其他地方使用的日期使用JavaScript的标准对象

使用web浏览器的JavaScript控制台,您可以看到将
08-09-2019 10:59 AM
解析为
新日期(“08-09-2019 10:59 AM”)正确返回:

2019年8月9日星期五10:59:00 GMT+0200(中欧夏季时间)
因此,我在谷歌的问题跟踪程序上提交了一个bug,详细说明了这一点。您可以找到问题报告,然后单击☆ 在左上角,让谷歌知道你也遇到了这个问题

解决方法: 现在,只要您的日期都是相同的格式,您就可以将日期转换为在的日期构造函数中定义的格式:

函数解析日期(日期){
var parts=日期分割(“”);
var datePart=parts[0]。拆分(“-”;
var timePart=部件[1];
var amPm=零件[2];
如果(amPm==“PM”){
var temp=时间部分分割(“:”);
timePart=(parseInt(temp[0])+12.toString()+“:”+temp[1];
}
返回新日期(日期部分[2]+“-”+日期部分[0]+“-”+日期部分[1]+“T”+时间部分+“:00”);
}
用法: 而不是使用

fileDate=新日期(fileSheet.getRange(2,dateCol,1,1.getValue());
您可以使用:

fileDate=parseDate(fileSheet.getRange(2,dateCol,1,1.getValue());
参考资料:
这似乎是一个bug! 根据应用程序脚本文档,联系人服务除外:

应用程序脚本中其他地方使用的日期使用JavaScript的标准对象

使用web浏览器的JavaScript控制台,您可以看到将
08-09-2019 10:59 AM
解析为
新日期(“08-09-2019 10:59 AM”)正确返回:

2019年8月9日星期五10:59:00 GMT+0200(中欧夏季时间)
因此,我在谷歌的问题跟踪程序上提交了一个bug,详细说明了这一点。您可以找到问题报告,然后单击☆ 在左上角,让谷歌知道你也遇到了这个问题

解决方法: 现在,只要您的日期都是相同的格式,您就可以将日期转换为在的日期构造函数中定义的格式:

函数解析日期(日期){
var parts=日期分割(“”);
var datePart=parts[0]。拆分(“-”;
var timePart=部件[1];