Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在已发布的附加组件中获取表单提交者或文档的日期_Google Apps Script_Google Forms - Fatal编程技术网

Google apps script 如何在已发布的附加组件中获取表单提交者或文档的日期

Google apps script 如何在已发布的附加组件中获取表单提交者或文档的日期,google-apps-script,google-forms,Google Apps Script,Google Forms,在我的Google Apps脚本加载项Simply Send中,我尝试捕获时间戳。我得到时间戳(使用e.response.getTimestamp().toString();),但它总是为EST格式化,EST是我的时区(主脚本文件的时区) 我想要的是提交表单的人的时区,或者是安装插件的表单文档的时区 如果有人有一个很酷的技巧来获取此信息,我们将不胜感激。如果我们假设运行您的加载项的用户与他们的表单处于同一时区,那么获取用户的时区就足够了 CalendarApp有一个返回用户主日历时区的方法 te

在我的Google Apps脚本加载项Simply Send中,我尝试捕获时间戳。我得到时间戳(使用
e.response.getTimestamp().toString();
),但它总是为EST格式化,EST是我的时区(主脚本文件的时区)

我想要的是提交表单的人的时区,或者是安装插件的表单文档的时区


如果有人有一个很酷的技巧来获取此信息,我们将不胜感激。

如果我们假设运行您的加载项的用户与他们的表单处于同一时区,那么获取用户的时区就足够了

CalendarApp有一个返回用户主日历时区的方法

template.timezone=CalendarApp.getTimeZone();
下面是一个快速表单加载项演示,它将在对话框中显示该时区。时区以字符串形式返回,时区名称由列出。这是Google Apps脚本TriggerBuilders使用的格式,例如:

//安排触发器在美国/太平洋时区每天中午执行
ScriptApp.newTrigger(“myFunction”)
.基于时间的()
.atHour(12)
.每天(1)
.inTimezone(“美国/洛杉矶”)
.create();

代码.gs
/**
*@OnlyCurrentDoc将脚本限制为仅访问当前表单。
*/
变量对话框标题='时区探测';
/**
*添加带有项目的自定义菜单以显示侧栏和对话框。
*
*@param{Object}是简单onOpen触发器的事件参数。
*/
功能开启(e){
FormApp.getUi()
.createAddonMenu()
.addItem('显示对话框','显示对话框')
.addToUi();
}
/**
*安装加载项时运行;调用onOpen()以确保菜单创建和
*立即完成任何其他初始化工作。
*
*@param{Object}是简单onInstall触发器的事件参数。
*/
函数onInstall(e){
onOpen(e);
}
/**
*打开一个对话框。对话框结构在dialog.html中描述
*项目文件。
*/
函数showDialog(){
var template=HtmlService.createTemplateFromFile('Dialog');
template.timezone=CalendarApp.getTimeZone();
var ui=模板
.评估()
.setWidth(350)
.设置高度(180)
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
FormApp.getUi().showModalDialog(用户界面,对话框标题);
}
Dialog.html

您的时区是:
我仍然需要测试(如果不起作用,我将编辑我的响应)。这就是我从响应中获取文档时区的方法。谢谢你的帮助

  var timestamp =  thisResponse.getTimestamp();
  var timezone = CalendarApp.getTimeZone();
  var timestampZ = Utilities.formatDate(timestamp, timezone, "EEE, MMM dd yyyy HH:mm:ss Z");
  timestamp = new Date(timestampZ);

缺点:您可能会有用户想知道为什么您的加载项需要访问他们的日历。在所有应用程序中获取当前文档的时区会很好,但我会尽我所能获取。谢谢。这很有帮助,但现在我需要弄清楚如何使用CalendarApp时区,并将其与响应时间戳合并以显示正确的时间。有没有办法从日历应用程序时区获取GMT偏移量?我沿着这条路径开始,但意识到你没有说你想对时区信息做什么。我没有看到任何关于它的JavaScript问题,但是Java中有一些问题。没有什么极端;使用来自Joda的数据构建关联数组,以便进行简单的查找。可能有一种聪明的方法可以使用原生日期方法。可能需要花费最长的时间使用Utilities.formatDate(),它需要一个TZ参数。这将是一个有趣的后续问题!在作为答案编写之前,我必须进行测试,但这是我为将时间戳转换为用户时区而想到的。谢谢莫格斯达的帮助,太酷了!(我仍然认为这会更好,因为它是自己的问答,因为它本身就是一个有趣的问题!)