Google脚本中getMonth()函数已弃用,求替代方案修复失效脚本
解决方案
首先澄清:JavaScript原生Date对象的getMonth()方法并没有被弃用,你碰到的问题大概率是从表格获取的firstDay不再是标准Date类型(比如返回了字符串或其他非日期类型),或是Google Apps Script在特定场景下的类型转换异常。下面给几种靠谱的替代方案,完全不用重写整个日期处理逻辑:
方案1:用Google Apps Script内置的Utilities.formatDate(首推)
这个方法能直接把Date对象转成指定格式的字符串,还自动处理时区问题,比手动拼接靠谱得多:
firstDay = sheet.getRange(rowCount, 2).getValue(); // 先确保是Date类型,不是的话强制转换 if (!(firstDay instanceof Date)) { firstDay = new Date(firstDay); } // 格式化为dd/mm/yyyy,时区换成你表格所在的时区,比如"Asia/Shanghai" firstDay = Utilities.formatDate(firstDay, "Asia/Shanghai", "dd/MM/yyyy");
方案2:继续用Date原生方法(先解决类型问题)
如果偏好手动拼接,先确保拿到的是标准Date对象,再调用方法,顺便补零保证格式统一:
firstDay = sheet.getRange(rowCount, 2).getValue(); // 强制转成Date对象,避免类型错误 firstDay = new Date(firstDay); const month = String(firstDay.getMonth() + 1).padStart(2, '0'); // 单月补零成两位 const date = String(firstDay.getDate()).padStart(2, '0'); const year = firstDay.getFullYear(); firstDay = `${month}/${date}/${year}`;
之前的代码如果是1月会输出"1/5/2024",现在会变成"01/05/2024",格式更规范。
方案3:直接在表格里处理格式
你也可以提前把目标列的单元格格式设为dd/mm/yyyy,然后用getDisplayValue()直接拿格式化好的字符串,省得脚本里处理:
firstDay = sheet.getRange(rowCount, 2).getDisplayValue();
排查小技巧
- 检查表格对应单元格的格式,别混进文本类型的日期
- 在脚本里加个日志看看拿到的是什么:
console.log(typeof firstDay, firstDay);,确认下类型和值是否正常
内容的提问来源于stack exchange,提问作者proball
相关产品推荐
相关产品推荐

