Google Sheets App Script调用toLocaleString返回M01而非月份全称问题
问题原因排查
toLocaleString使用default作为区域参数时,会继承Google Apps Script项目的默认区域配置,若项目区域非英语区或存在自定义规则,就可能返回M01这类非预期格式- Google Sheets单元格传入的日期参数可能是序列号格式,默认的
new Date(date)解析逻辑和Sheets的日期序列化规则不匹配,虽然年份返回正常,但月份解析异常 - 目标单元格的数字格式设置为自定义月份编码规则,会自动将脚本返回的正确月份文本转换为
M01格式
解决方案
- 第一步先验证单元格格式:选中对应单元格,点击顶部菜单栏「格式」→「数字」→选择「纯文本」,排除单元格自动格式化的干扰
- 第二步修改脚本,显式指定区域为英语区,同时兼容Sheets日期序列号的解析逻辑,修改后代码如下:
function actualBudget(date) { // 兼容Google Sheets日期序列号解析 const dateObj = Object.prototype.toString.call(date) === '[object Date]' ? date : typeof date === 'number' ? new Date(Date.UTC(1899, 11, 30 + date)) : new Date(date); // 显式指定en-US区域,确保返回英文完整月份名 const month = dateObj.toLocaleString('en-US', { month: 'long' }); const year = dateObj.getFullYear().toString(); return month; }
- 第三步若问题仍存在,可在函数内添加
console.log(month, date),执行后查看Apps Script控制台的运行日志,确认异常值是脚本返回的还是单元格转换产生的,再针对性调整。
内容的提问来源于stack exchange,提问作者JAK
相关产品推荐
相关产品推荐

