如何将Google Forms存入Google Sheets的日期值转为“April 22, 2021”格式
Google Forms提交的日期值格式调整方案
零代码端:直接在Google Sheets配置显示格式(推荐优先使用)
- 选中表单自动同步的提交时间列所有单元格
- 右键打开「单元格格式」设置页,选择自定义日期格式
- 在自定义格式输入框填入
mmmm dd, yyyy,确认后单元格就会直接显示为"April 22, 2021"的效果,完全不需要改动后续的表单同步逻辑 - 关键注意点:如果后续要通过脚本读取这个单元格的日期值,一定要调用
getDisplayValue()方法取渲染后的格式化文本,不要用getValue()——后者会直接返回底层存储的原生Date对象,打印出来就是你提到的带时区的长字符串,完全不受单元格格式设置的影响。
脚本端:通过Google Apps Script自定义转换
如果你的需求是把处理后的日期值传到其他系统、或者需要自定义逻辑输出格式化结果,可以直接在代码里对原始Date对象做本地化格式化:
// 读取到的原始Date对象,对应输出的长文本为"Thu Apr 22 03:00:00 GMT-04:00 2021" const rawDateValue = spreadsheet.getRange("A2").getValue(); // 配置格式化规则,匹配目标输出样式 const finalFormattedDate = rawDateValue.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric', timeZone: spreadsheet.getSpreadsheetTimeZone() // 自动对齐表格的时区,避免日期偏移 }); // 最终finalFormattedDate的输出值即为"April 22, 2021"
- 踩坑提醒:一定要对齐表格的时区配置,如果手动写死时区参数,很容易因为夏令时、跨时区的问题出现日期偏移一天的情况,直接读取表格自身的时区配置可以完全规避这个问题。
外部端:在读取侧直接解析原始字符串
如果你已经把原始的日期长文本同步到了外部系统(比如后端服务、前端页面),不需要改动Sheets和脚本的配置,可以直接在解析侧把字符串转为Date对象后做格式化处理,以JS环境为例:
const rawDateString = "Thu Apr 22 03:00:00 GMT-04:00 2021"; const dateInstance = new Date(rawDateString); const formattedResult = dateInstance.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); // 输出结果即为"April 22, 2021"
避坑提示:不要用字符串截断、正则替换的硬编码方式去修改日期文本,不同浏览器、不同服务器环境对Date对象的字符串输出规则有细微差异,硬写解析逻辑很容易出现兼容问题,优先用系统原生的日期本地化API处理。
内容的提问来源于stack exchange,提问作者Mathew Gellner-Garcia
相关产品推荐
相关产品推荐

