You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Scripts表单日期格式化报错:参数不匹配方法签名

问题分析与解决方案

错误原因

你碰到的Exception: The parameters (String,String,String) don't match the method signature报错,核心问题是**Utilities.formatDate()要求第一个参数必须是Date类型的对象**,但你从e.values[1]获取的signDate是一个字符串(日志里的20/05/2020),并非Date对象,导致方法参数类型不匹配,从而触发报错。

解决方法:将字符串转为Date对象再格式化

表单提交的日期是DD/MM/YY格式的字符串,我们需要先拆分它的日、月、年部分,再手动构造Date对象(直接用new Date("20/05/2020")可能存在跨环境兼容性问题,手动拆分更可靠)。修改后的代码如下:

var signDateStr = e.values[1]; // 获取表单提交的日期字符串,例如"20/05/2020"
// 拆分字符串为日、月、年三部分
var dateParts = signDateStr.split('/');
// 注意:JavaScript的Date对象中月份从0开始计数,所以要将月份值减1
var signDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
// 现在可以正常调用formatDate进行格式化
var formatSignDate = Utilities.formatDate(signDate, Session.getScriptTimeZone(), "dd MMMM yyyy");
body.replaceText('{{Execution Date}}', formatSignDate);

这里推荐用Session.getScriptTimeZone()代替硬编码的"GMT+1",它会自动匹配脚本所在时区,避免手动设置时区带来的误差。

关于表格单元格日期的格式化

完全可以直接用表格单元格的日期来格式化!如果表单响应数据存储在Google Sheets中,且对应单元格设置为日期格式,那么直接从单元格获取的值本身就是Date类型对象,无需额外转换,就能直接用Utilities.formatDate()处理:

// 假设表单响应表名为"表单响应1",日期位于第2列(索引从1开始)
var responseSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("表单响应1");
var lastSubmittedRow = responseSheet.getLastRow();
// 直接获取单元格的Date对象
var signDate = responseSheet.getRange(lastSubmittedRow, 2).getValue();
// 格式化日期
var formatSignDate = Utilities.formatDate(signDate, Session.getScriptTimeZone(), "dd MMMM yyyy");
body.replaceText('{{Execution Date}}', formatSignDate);

这种方式更稳妥,无需处理字符串转Date的兼容性问题,直接利用Sheets对日期的原生支持即可。

内容的提问来源于stack exchange,提问作者nmbzn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:47:55