Javascript 谷歌应用程序脚本中的格式化日期

Javascript 谷歌应用程序脚本中的格式化日期,javascript,datetime,google-apps-script,Javascript,Datetime,Google Apps Script,我试图在提交表单时获得一个带有简单格式日期的电子表格,但所有日期,包括时间戳,都会被张贴为“1969年12月31日下午2:00”。。。我做错了什么?任何帮助都将不胜感激 函数formSubmitReply(e){ var sheet=SpreadsheetApp.getActiveSheet(); var row=sheet.getActiveRange().getRowIndex(); var lastRow=sheet.getLastRow(); //将新票证的状态设置为“新建”。 shee

我试图在提交表单时获得一个带有简单格式日期的电子表格,但所有日期,包括时间戳,都会被张贴为“1969年12月31日下午2:00”。。。我做错了什么?任何帮助都将不胜感激

函数formSubmitReply(e){
var sheet=SpreadsheetApp.getActiveSheet();
var row=sheet.getActiveRange().getRowIndex();
var lastRow=sheet.getLastRow();
//将新票证的状态设置为“新建”。
sheet.getRange(lastRow,getColIndexByName(“状态”)).setValue(“新”);
var ticketTime=sheet.getRange(行,getColIndexByName(“时间戳”)).getValue();
var subdate=Utilities.formatDate(新日期(ticketTime),“GMT-10”,“EEE MM/dd/yyyy”在“h:MM a”);
sheet.getRange(lastRow,getColIndexByName(“时间戳”)).setValue(子日期);
var sDate=sheet.getRange(行,getColIndexByName(“开始日期”)).getValue();
var strtdate=Utilities.formatDate(新日期(sDate),“GMT-10”,“EEE,MMM dd,yyyy”);
sheet.getRange(lastRow,getColIndexByName(“开始日期”)).setValue(strtdate);
var sTime=sheet.getRange(行,getColIndexByName(“开始时间”)).getValue();
var strttime=Utilities.formatDate(新日期(时间),“GMT-10”,“h:mm”);
//sheet.getRange(lastRow,getColIndexByName(“开始时间”)).setValue(strttime);
var eDate=sheet.getRange(行,getColIndexByName(“结束日期”)).getValue();
var enddate=Utilities.formatDate(新日期(eDate),“GMT-10”,“EEE,MMM dd,yyyy”);
sheet.getRange(lastRow,getColIndexByName(“结束日期”)).setValue(结束日期);
var eTime=sheet.getRange(行,getColIndexByName(“结束时间”)).getValue();
var endtime=Utilities.formatDate(新日期(eTime),“GMT-10”,“h:mm”);
//sheet.getRange(lastRow,getColIndexByName(“结束时间”)).setValue(结束时间);
}

我认为电子表格中的“日期”不是日期对象,它们只是字符串,JavaScript将其计算为0,这就是为什么会得到一个“原点”(又名历元)减去GMT偏移量的日期值……根据这些值在单元格中的方式,可能会有不同的解决方案。你能给我们看一个数据示例,告诉我们它们是如何创建的吗


若要检查我的猜测是否正确,您只需尝试使用电子表格界面更改“日期”单元格的显示格式。如果您可以在那里进行更改并获得一致的结果,则我错了。。。如果不是。。。好吧,我想我是对的:-)

这段代码取第一行带有“时间戳”的日期,即
新日期(“时间戳”)
因此它返回错误的日期作为getRowIndex返回1:

函数formSubmitReply(e){
var sheet=SpreadsheetApp.getActiveSheet();
var row=sheet.getActiveRange().getRowIndex();
//尝试按如下所示递增行以获得第2行
行++;
var lastRow=sheet.getLastRow();
//增加最后一行写入新行以观察新日期
lastRow++;
//将新票证的状态设置为“新建”。
sheet.getRange(lastRow,getColIndexByName(“状态”)).setValue(“新”);
var ticketTime=sheet.getRange(行,getColIndexByName(“时间戳”)).getValue();
var subdate=Utilities.formatDate(新日期(ticketTime),“GMT-10”,“EEE MM/dd/yyyy”在“h:MM a”);
//使用日志窗口选择视图->日志查看输出
Logger.log(“子日期:+子日期”);
sheet.getRange(lastRow,getColIndexByName(“时间戳”)).setValue(子日期);
var sDate=sheet.getRange(行,getColIndexByName(“开始日期”)).getValue();
var strtdate=Utilities.formatDate(新日期(sDate),“GMT-10”,“EEE,MMM dd,yyyy”);
sheet.getRange(lastRow,getColIndexByName(“开始日期”)).setValue(strtdate);
var sTime=sheet.getRange(行,getColIndexByName(“开始时间”)).getValue();
var strttime=Utilities.formatDate(新日期(时间),“GMT-10”,“h:mm”);
//sheet.getRange(lastRow,getColIndexByName(“开始时间”)).setValue(strttime);
var eDate=sheet.getRange(行,getColIndexByName(“结束日期”)).getValue();
var enddate=Utilities.formatDate(新日期(eDate),“GMT-10”,“EEE,MMM dd,yyyy”);
sheet.getRange(lastRow,getColIndexByName(“结束日期”)).setValue(结束日期);
var eTime=sheet.getRange(行,getColIndexByName(“结束时间”)).getValue();
var endtime=Utilities.formatDate(新日期(eTime),“GMT-10”,“h:mm”);
//sheet.getRange(lastRow,getColIndexByName(“结束时间”)).setValue(结束时间);
}
//在这里输入代码
我建议查看以下内容:

格式模式如下:

还有一个例子可以帮助你


Utilities.formatDate(thisFile.getLastUpdate(),“GMT-5”,“yyyy/MM/dd,HH:MM:ss”)

电子表格中的日期可以视为js日期对象。问题是,当日期对象设置为电子表格时,对象将根据文档标准日期格式进行处理。我们需要一种方法来设置文档的标准日期格式。很抱歉,您所说的完全错误。当脚本读取工作表中的日期时,该日期在电子表格中的显示方式完全不相关。。。我建议你在做出这样的断言之前先尝试一下。我不确定我当时是否正确理解你的意思。。这段代码适用于我:var lastDate=sheet.setActiveCell(“B1”).getValue();我只是说,在电子表格中,日期可以用多种不同的格式显示(日+月、日+月+年、小时+分钟…),这不会改变其日期对象的性质:Javascript将始终读取日期对象,包括年和月等,如果(并且仅当)这是一个日期,而不是日期的字符串表示。好吧,我同意。我以为这家伙想像我一样设置电子表格的格式。我已经投了你的赞成票,所以请把你的反对票从我的另一个帖子中删除,因为这确实是正确的。