如何在已发布的加载项中获取表单提交者或文档的日期

时间:2016-01-28 14:22:41

标签: google-apps-script google-form

在我的Google Apps脚本插件简单发送中,我尝试捕获时间戳。我得到时间戳(使用e.response.getTimestamp().toString();)但它总是格式化为EST,这是我的时区(主脚本文件的时区)。

我想要的是提交表单的人的时区,或安装加载项的表单文档的时区。

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

2 个答案:

答案 0 :(得分:2)

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

CalendarApp使用getTimeZone()方法返回用户主日历的时区。

template.timezone = CalendarApp.getTimeZone();

下面是一个快速的Forms Add-on演示,它将在对话框中显示该时区。时区以字符串形式返回,时区名称由Joda.org列出。这是Google Apps脚本TriggerBuilders使用的格式,例如:

 // Schedule the trigger to execute at noon every day in the US/Pacific time zone
 ScriptApp.newTrigger("myFunction")
   .timeBased()
   .atHour(12)
   .everyDays(1)
   .inTimezone("America/Los_Angeles")
   .create();

screenshot

Code.gs

/**
 * @OnlyCurrentDoc  Limits the script to only accessing the current form.
 */

var DIALOG_TITLE = 'Timezone probe';

/**
 * Adds a custom menu with items to show the sidebar and dialog.
 *
 * @param {Object} e The event parameter for a simple onOpen trigger.
 */
function onOpen(e) {
  FormApp.getUi()
      .createAddonMenu()
      .addItem('Show dialog', 'showDialog')
      .addToUi();
}

/**
 * Runs when the add-on is installed; calls onOpen() to ensure menu creation and
 * any other initializion work is done immediately.
 *
 * @param {Object} e The event parameter for a simple onInstall trigger.
 */
function onInstall(e) {
  onOpen(e);
}


/**
 * Opens a dialog. The dialog structure is described in the Dialog.html
 * project file.
 */
function showDialog() {
  var template = HtmlService.createTemplateFromFile('Dialog');
  template.timezone = CalendarApp.getTimeZone();
  var ui = template
      .evaluate()
      .setWidth(350)
      .setHeight(180)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  FormApp.getUi().showModalDialog(ui, DIALOG_TITLE);
}

Dialog.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <div>
      Your timezone is: <?!= timezone ?>
    </div>
  </body>
</html>

答案 1 :(得分:2)

我仍然需要测试(如果它没有工作,我会编辑我的回复)。这就是我从响应中获取文档时区的想法。谢谢Mogsdad的帮助。

  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);