gpt4 book ai didi

javascript - 提交时的 Google 表单获取值并设置时间格式

转载 作者:行者123 更新时间:2023-11-30 17:33:23 26 4
gpt4 key购买 nike

我在 Google 表单中使用 Google Apps 脚本。当用户提交 Google 表单时,我从一个问题中得到一个值。然后,根据我在 post about daylight savings 上看到的内容,我将该值设为日期对象。我用它来确定时区。我通过 Utilities.formatDate 运行日期对象并希望获得格式正确的日期。

示例:上午 9:00

但我得到的时间与预期完全不同。

我的问题是:有人能帮我理解为什么下面的代码输出的时间相差 3 小时吗?

function onSubmit(e) {

var values = e.values;
Logger.log(values);

try {
var start1 = new Date(values[3]);
var startN = new Date(start1).toString().substr(25,6)+"00";
var startT = Utilities.formatDate(start1, startN, "h:mm a");
Logger.log(startT);

} catch(error) {
Logger.log(error);
}
}

最佳答案

Utilities formatDate 不支持 GMT 的假设...参数不正确。

您在引用中提到的帖子用于获取日历事件,并且是从另一个夏令时获取事件(从日历事件本身获取 TZ 信息)时获取正确值的有用方法,例如事件下个月将是“夏令时”,而我们仍处于“冬令时”......

您的问题可能来自不同的来源,具体取决于脚本的时区设置与来源的时区。您能否描述您使用此脚本的确切配置?

与此同时,这里有一段小代码演示了代码是如何工作的 + 记录器结果:

function testOnSubmit() {
var eventInfo = {};
var values = {};
values['3'] = new Date();
eventInfo['values'] = values;
Logger.log('eventInfo = '+JSON.stringify(eventInfo)+'\n\n');
onSubmit(eventInfo);
}

function onSubmit(e) {
var values = e.values;
try {
var start1 = new Date(values[3]);
Logger.log('onSubmit log results : \n');
Logger.log('start1 = '+start1)
var startN = new Date(start1).toString().substr(25,6)+"00";
Logger.log('startN = '+startN);
var startT = Utilities.formatDate(start1, startN, "h:mm a");
Logger.log('result in timeZone = '+startT);
} catch(error) {
Logger.log(error);
}
}

enter image description here

编辑:另外,关于 30 和 45' 的偏移量,可以通过像这样更改子字符串长度轻松解决:

var startN = new Date(start1).toString().substr(25,8);

结果是一样的,几年前我不得不使用另一个版本,因为谷歌在某个时刻更改了 Utilities.formatDate 方法 (issue 2204),但这个问题已经修复。

编辑 2: 在同一主题上,两种方法实际上返回相同的结果,GMT 字符串的唯一优点是您不必知道确切的时区名称......有还有 Session.getScriptTimeZone() 方法。下面是一个演示脚本,显示了 1 月和 7 月两个日期的结果以及日志结果:

function testOnSubmit() {
var eventInfo = {};
var values = {};
values['3'] = new Date(2014,0,1,8,0,0,0);
eventInfo['values'] = values;
Logger.log('eventInfo = '+JSON.stringify(eventInfo)+'\n\n');
onSubmit(eventInfo);
values['3'] = new Date(2014,6,1,8,0,0,0);
eventInfo['values'] = values;
Logger.log('eventInfo = '+JSON.stringify(eventInfo)+'\n');
onSubmit(eventInfo);
}

function onSubmit(e) {
var values = e.values;
var start1 = new Date(values[3]);
Logger.log('onSubmit log results : ');
Logger.log('start1 = '+start1)
var startN = new Date(start1).toString().substr(25,8);
Logger.log('startN = '+startN);
Logger.log('result in timeZone using GMT string = '+Utilities.formatDate(start1, startN, "MMM,d h:mm a"));
Logger.log('result in timeZone using Joda.org string = '+Utilities.formatDate(start1, 'Europe/Brussels', "MMM,d h:mm a"));
Logger.log('result in timeZone using Session.getScriptTimeZone() = '+Utilities.formatDate(start1, Session.getScriptTimeZone(), "MMM,d h:mm a")+'\n');
}

enter image description here

另请注意,Logger 有自己的方式来显示日期对象值!它使用 ISO 8601 时间格式,即 UTC 值。

关于javascript - 提交时的 Google 表单获取值并设置时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com