函数 NOW() + 设置时区(Google 张)

Function NOW() + Setting Timezone (Google Sheets)

我住在巴西(UTC 偏移量 - 3:00),这里有一种叫做夏令时的东西,在一年中的某些时候,时钟会提前 1 小时。

发生的情况是我准备了一个完整的电子表格来过滤英格兰时区的数据。

我今天遇到了一个大问题,因为 Google 的时间变了,我的数据被错误地过滤了。

我在脚本中的原始公式是:

spreadsheet.getCurrentCell().setFormula('=text(now()+"5:00","yyyy/mm/dd hh:mm")');

现在很多小时后我意识到失败并需要切换到:

spreadsheet.getCurrentCell().setFormula('=text(now()+"4:00","yyyy/mm/dd hh:mm")');

为了不再发生这种情况,我想知道如何在 NOW () 函数中添加英格兰时区。

我试过了:

spreadsheet.getCurrentCell().setFormula('=text(now("UK"),"yyyy/mm/dd hh:mm")');

但是未能return。我每 1 分钟使用一个触发器来更新电子表格中的时间,我想知道我能做些什么来解决这个问题。

详情: 我可以在电子表格设置中更改时间,但我需要以当地时间保存。

  • 您想在不更改 Spreadsheet 本地时区的情况下使用不同的时区。
  • 您想将转换为不同时区的时间作为文本放入电子表格。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?

问题和解决方法:

不幸的是,在当前阶段,内置函数NOW()没有更改时区的选项。如果更改NOW()的时区,则需要更改Spreadsheet的时区。但在您的情况下,无法更改电子表格的时区。因此,作为一种解决方法,我想建议使用 Utilities.formatDate().

示例脚本:

示例脚本如下

function NOW2(timeZone, format) {
  return Utilities.formatDate(new Date(), timeZone, format);
}

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getCurrentCell().setFormula('=NOW2("Europe/London", "yyyy/mm/dd hh:mm")');
}
  • NOW2() 用作自定义函数。在示例脚本中,当 myFunction() 为 运行 时,=NOW2("Europe/London", "yyyy/mm/dd hh:mm") 被放入当前单元格。这样,当前时间通过将时区转换为Europe/London作为yyyy/mm/dd hh:mm.
  • 的格式来放置

注:

  • 如果要在电子表格打开时刷新=NOW2("Europe/London", "yyyy/mm/dd hh:mm")的自定义函数,请使用以下脚本作为简单触发器。

    function onOpen(e) {
      e.source.createTextFinder("=NOW2").matchFormulaText(true).replaceAllWith("temp");
      e.source.createTextFinder("temp").matchFormulaText(true).replaceAllWith("=NOW2");
    }
    
  • 如果你想使用上面的时间驱动触发器,请使用下面的脚本。在这种情况下,触发器的当前总 运行 时间和自定义函数的当前 运行 时间分别为 90 分钟/天和 30 秒/执行。 Ref请注意这一点。

    function myFunction() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      ss.createTextFinder("=NOW2").matchFormulaText(true).replaceAllWith("temp");
      ss.createTextFinder("temp").matchFormulaText(true).replaceAllWith("=NOW2");
    }
    

参考文献:

如果我误解了您的问题而这不是您想要的结果,我深表歉意。

只是一个建议....我使用“数据”sheet,它包含查找列表和各种命名范围。我在也有夏令时的澳大利亚。

我刚刚添加了一个命名范围 'AU_TZ',当我们的时间发生变化时,我将其从 11(小时)更改为 10。所以为了对照英国时间,我可以使用

now() - AU_TZ

只需要记住更改我的价差中的这个值sheet。 :)