AppsScript字符串转日期时间遇类型错误,求排查解决
问题原因分析及解决办法
核心问题1:String包装对象导致类型不匹配
你用new String(dateTimeString)创建的是String对象实例,而Google Apps Script的Utilities.parseDate方法要求第一个参数必须是原始字符串类型(不是包装对象)。这种类型不匹配直接触发了Exception: Invalid argument: date. Should be of type: String错误。
核心问题2:日期格式符不匹配
你的输入日期字符串是2023-06-30T18:28:01+10:00,时区偏移带冒号(+10:00),但你用的格式符是X——这个格式符对应不带冒号的时区偏移(比如+1000或Z)。格式不匹配会导致解析失败,进而抛出参数无效的错误。
额外问题:缺少参数校验
当你在Google Sheets里作为自定义函数调用时,如果没有传入参数,dateTimeString会是undefined,这时候即使去掉new String(),直接传undefined给parseDate也会触发Exception: Invalid argument: undefined。
修正后的代码
/** * Converts a string to a date-time value * * @param {string} dateTimeString - ISO 8601格式的日期时间字符串(带时区偏移) * @customfunction */ function stringToDateTime(dateTimeString) { // 参数校验:确保传入的是有效字符串 if (typeof dateTimeString !== 'string' || dateTimeString.trim() === '') { return '请传入有效的日期时间字符串'; } // 使用XXX对应带冒号的时区偏移格式 return Utilities.parseDate(dateTimeString, "GMT", "yyyy-MM-dd'T'HH:mm:ssXXX"); } // 测试调用 var x = stringToDateTime("2023-06-30T18:28:01+10:00"); Logger.log(x); // 会输出对应的Date对象
关键修正点
- 移除
new String()包装,直接使用原始参数 - 将格式符从
X改为XXX,匹配带冒号的时区偏移 - 添加参数校验,避免undefined或非字符串参数导致的错误
内容的提问来源于stack exchange,提问作者Mev
相关产品推荐
相关产品推荐

