预填充Google Form始终给DateTime对象加4小时的问题求助
无需手动调整时间的解决方案
问题核心:直接使用new Date(data[1])解析纽约时区的时间字符串时,Apps Script会默认按UTC规则处理该字符串,导致生成的时间戳与预期的纽约时间存在偏移,最终表单显示时出现4小时误差。
不用手动减去时间的话,通过明确指定时区解析时间字符串即可修复:
修改后的代码:
// Populate Timestamp formItem = formItems[0].asDateTimeItem(); // 指定纽约时区解析时间字符串,格式需与data[1]的实际格式匹配 const targetTimeZone = "America/New_York"; const dateFormat = "yyyy-MM-dd HH:mm:ss"; // 示例格式,根据你的data[1]调整 const parsedDate = Utilities.parseDate(data[1], targetTimeZone, dateFormat); response = formItem.createResponse(parsedDate); formResponse.withItemResponse(response);
注意点:
dateFormat参数必须严格匹配data[1]的时间字符串格式,比如如果你的data[1]是"May 20, 2024 2:30 PM",格式就要改成"MMM dd, yyyy h:mm a"。Utilities.parseDate会按照指定的纽约时区解析字符串,生成的Date对象内部时间戳完全对应预期的纽约时间,传给表单后会自动适配表单设置的时区,不会再出现偏移。- 保持脚本和表单的时区设置为
America/New_York(你已确认此配置正确)。
内容的提问来源于stack exchange,提问作者Joshua Pelton-Stroud
相关产品推荐
相关产品推荐

