获取当前用户时区

时间:2014-07-14 16:13:01

标签: google-apps-script

我一直在使用Session.getTimeZone()来获取当前用户的时区。我刚才注意到它已经deprecated,我看不到任何可以复制此功能的内容。我的用户遍布美国各地,日期/时间应相应格式化。如何获取当前用户的时区而不是脚本/所有者的时区?

有问题的项目是一个独立的脚本。

3 个答案:

答案 0 :(得分:5)

Greg,正常的javascript似乎按预期工作,这可能是天然气中的新功能。代码函数的第二个例子是为我返回正确的时区偏移量。 我目前在gasOffsetScript中使用Session.getTimeZone()。 这里的问题对未来可能是一个很好的解读 Using Calendar Timezone to set event Timezone, not the users

如果脚本以用户身份运行,则下一个代码将根据用户的默认日历设置获取用户时区。

function getUserTimeZone() {
  var userTimeZone = CalendarApp.getDefaultCalendar().getTimeZone();
  Logger.log(userTimeZone)
}

或者您可以使用普通的javascript修改以下内容。

返回用户时区的代码 Stackoverflow question

function userTimeZone() {
  function pad(number, length){
    var str = "" + number
    while (str.length < length) {
        str = '0'+str
    }
    return str
}

var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
          pad(parseInt(Math.abs(offset/60)), 2)+
          pad(Math.abs(offset%60), 2))
  Logger.log(offset)
}
祝你好运兄弟,时区是荆棘。

答案 1 :(得分:3)

使用电子表格的时区:getSpreadsheetTimeZone()

如果您使用独立脚本,您唯一的希望是在用户的驱动器上创建临时电子表格(您需要将其发布为以用户身份运行),然后查看电子表格的默认时区具有

更多信息:Google Developers - Spreadsheet

答案 2 :(得分:1)

Gmail加载项中,您可以通过激活useLocaleFromApp获取buildAddOn参数中的用户时区和区域设置。 Check the documentation of Accessing User Locale and Timezone

获取时区和区域设置的步骤:

  1. 在清单中添加useLocaleFromApp并使用true "useLocaleFromApp": true
  2. 添加范围&#34; https://www.googleapis.com/auth/script.locale&#34;
  3. 在buildAddOn中,您将收到参数userLocale和userTimezone
  4. 清单示例:

    {
      "timeZone": "Etc/GMT"
      "oauthScopes": ["https://www.googleapis.com/auth/gmail.addons.execute", "https://www.googleapis.com/auth/gmail.addons.current.message.readonly", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/script.external_request","https://www.googleapis.com/auth/script.locale"],
      "gmail": {
        "name": "TestApp",
        "logoUrl": "https://storage.googleapis.com/xxxxxxx/favicon.ico",
        "contextualTriggers": [{
          "unconditional": {
          },
          "onTriggerFunction": "buildAddOn"
        }],
        "primaryColor": "#fea001",
        "secondaryColor": "#fea001",
        "openLinkUrlPrefixes": ["https://mail.google.com/"],
        "version": "TRUSTED_TESTER_V2",
        "useLocaleFromApp": true
      }
    }
    

    加载项示例:

    function buildAddOn(e) 
    {
      var cards = [];
    
      var card = CardService.newCardBuilder().setName("Test timeZone");
    
      card.setHeader(CardService.newCardHeader().setTitle("test"));
    
      var section = CardService.newCardSection();
    
      section.addWidget( CardService.newTextParagraph().setText(e.userLocale));
      section.addWidget( CardService.newTextParagraph().setText(e.userTimezone.offSet));
      section.addWidget( CardService.newTextParagraph().setText(e.userTimezone.id));
    
      card.addSection(section);
    
      cards.push( card.build());
    
      return cards;
    }
    
      

    使用userTimezone.offSet参数时要小心。参数有   文档中引用的不同情况。参数   是带有S大写

    的userTimezone.offSet