获取当前用户时区

问题描述 投票:0回答:4

我一直在使用

Session.getTimeZone()
来获取当前用户的时区。我刚刚注意到它已被弃用,并且我看不到任何复制此功能的内容。我的用户遍布美国各地,日期/时间应采用相应的格式。如何获取当前用户的时区而不是脚本/所有者的时区?

相关项目是一个独立的脚本。

google-apps-script
4个回答
6
投票

Greg,正常的 JavaScript 似乎按预期工作,这可能是 Gas 中的新内容。 代码函数的第二个示例是为我返回正确的时区偏移量。 我目前正在 GasOffsetScript 中使用 Session.getTimeZone() 。 这里的问题可能是一个很好的阅读材料。
使用日历时区设置事件时区,而不是用户

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

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

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

返回用户时区的代码 Stackoverflow问题

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

祝兄弟好运,时区是荆棘。


2
投票

使用电子表格的时区:

getSpreadsheetTimeZone()

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

更多信息:Google 开发人员 - 电子表格


1
投票

Gmail Add-ons 中,您可以通过激活 useLocaleFromApp 在 buildAddOn 参数中获取用户时区和区域设置。 查看访问用户区域设置和时区的文档

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

  1. 在清单中添加 useLocaleFromApp 为 true
    "useLocaleFromApp": true
  2. 添加范围“https://www.googleapis.com/auth/script.locale
  3. 在buildAddOn中你将收到参数userLocale和userTimezone

清单示例:

{
  "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 参数。参数有 与文档中引用的情况不同。参数 是 userTimezone.offSet 与 S 大写


0
投票

我找到了一个解决方法。我正在使用 Excel,需要获取每个用户的时区。由于 Session.getTimeZone() 已被弃用,因此我使用 CalendarApp 来检索用户的时区。他们需要在脚本第一次运行时授予脚本权限,但之后它将正常工作。希望这有帮助!

function getUserTimeZoneFromCalendar() {
  // Get the default calendar of the authenticated user
  var calendar = CalendarApp.getDefaultCalendar();  

  // Retrieve the time zone of the calendar
  var timeZone = calendar.getTimeZone();
  
  // Log the time zone to the Apps Script Logger
  Logger.log('User Time Zone from Calendar: ' + timeZone);
  
  return timeZone;  // Return the time zone for further processing
} 
© www.soinside.com 2019 - 2024. All rights reserved.