同一Google表单中两个日期选择器时区不一致的App Script格式化问题
解决Google Apps Script中日期格式化时区不一致的问题
你碰到的核心问题是硬编码时区引发的夏令时/时区偏差:你用GMT+1做格式化时区,但表单提交的日期是CEST(GMT+2,夏令时)时区的00:00:00,两者差1小时,直接格式化就会把日期推前一天(从4月1日变成3月31日)。
给你两个靠谱的解决方案:
1. 使用脚本项目的时区(最稳妥)
不要硬编码时区字符串,而是用Session.getScriptTimeZone()获取脚本项目配置的时区,这样能保证格式化和脚本运行环境一致,自动适配夏令时:
// 获取脚本配置的时区 const scriptTimeZone = Session.getScriptTimeZone(); // 使用这个时区格式化日期 Logger.log('Original value: '+data[0][column]+' - Data for document: '+Utilities.formatDate(data[0][column], scriptTimeZone, "dd-MM-yyyy"));
2. 使用地区时区字符串(适配夏令时)
如果需要固定使用某个地区的时区(比如CEST对应的欧洲时区),不要用GMT+1或GMT+2,而是用具体的地区时区ID(比如"Europe/Paris"、"Europe/Brussels"),这类ID会自动处理夏令时和冬令时的切换:
Logger.log('Original value: '+data[0][column]+' - Data for document: '+Utilities.formatDate(data[0][column], "Europe/Paris", "dd-MM-yyyy"));
额外检查步骤
你可以先确认脚本的时区配置是否正确:
- 打开脚本编辑器,点击顶部菜单的「文件」>「项目属性」
- 切换到「信息」标签,查看「时区」设置
- 如果当前是
GMT+1,建议改成对应地区的时区(比如Europe/Amsterdam),避免夏令时期间的偏差
内容的提问来源于stack exchange,提问作者Casper
相关产品推荐
相关产品推荐

