如何在 Google Apps 脚本中使用 Momentsjs?

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

我正在尝试在 Google Apps 脚本中利用 momentjs 库,但我不清楚如何执行此操作。我不确定如何添加库,因此显然运行类似以下结果会导致“引用错误:‘时刻’未定义”:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var difference = a.diff(b);
google-apps-script momentjs libraries external
6个回答
25
投票

大多数人尝试使用密钥以 48 结尾的库。该库相当过时(它是版本 2.9,相当旧)。

使用

eval
UrlFetchApp.fetch
moment.js 或任何其他外部库都可以在 Google 应用程序脚本中轻松使用。

function testMoment() {
  eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js').getContentText());
  var date = moment().format("MMM Do YY");
  Logger.log(date)
}

您可以将 moment.js 托管在您自己的服务器上,或者使用像 cloudflare CDN 这样的 CDN 来引用该库。

对于 cloudflare,这里是显示 moment.js 版本及其 url 的页面:

https://cdnjs.com/libraries/moment.js/


撰写本文时,2.18.1 是最新版本。

对于 OP 发布的示例,它将如下所示:

function testMomentDifference() {
  eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js').getContentText());
  var a = moment([2007, 0, 29]);
  var b = moment([2007, 0, 28]);
  var difference = a.diff(b);
  Logger.log(difference);
}

17
投票

Google Apps 脚本 IDE 的脚本 ID 已更改。现在是“15hgNOjKHUG4UtyZl9clqBbl23sDvWMS8pfDJOyIapZk5RBqwL3i-rlCo”


9
投票

您可以通过创建新的

Script file
并添加以下代码来将 moment 和 moment.tz 添加到应用程序脚本中:

var cacheExpire = 3600;
var momentCache = "momentCache";
var momentUrl = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"

var momentTzCache = "momentTzCache";
var momentTzUrl = "https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.16/moment-timezone-with-data-2012-2022.min.js"

useCachedOrLive(momentCache,momentUrl);
useCachedOrLive(momentTzCache,momentTzUrl);

function useCachedOrLive(cacheToCheck, url){

  var cache = CacheService.getUserCache();
  var cachedData = cache.get(cacheToCheck);
  console.log(cacheToCheck);
  if(cachedData !== null){
    console.log("using cached " + cacheToCheck)
    eval(cachedData);
  }
  else
  {
    console.log("getting live " + cacheToCheck);
    var response = UrlFetchApp.fetch(url).getContentText();
    cache.put(cacheToCheck, response, cacheExpire);
    eval(response);

  }
}

这使用缓存服务来减少往返调用,如果需要,您可以修改它以包含数据子集。

感谢apadana让我开始!


8
投票

有更好最好的使用时刻的方法

不要使用 UrlFetchApp,以避免超出配额、缓存和服务器问题

下载最新版本的 moment.min.js 和 momemt-timzone.min.js

并将完整文件集成到应用程序脚本中,如下面的屏幕所示

这种方法从长远来看没有问题,只需在需要时随时更新文件即可。

添加这两个文件后,只需发布一个新版本并将其包含在任何其他脚本中

例如:

  1. 我将创建一个名为“MomentAPI”的脚本并包含两个 提到的文件,并发布新版本。
  2. 在名为“myScript”的其他脚本中,我将包含该库 “MomentAPI”及其脚本 ID 已知

然后将像下面的示例一样使用它

const moment = MomentAPI.moment; // init the library
  
const start = moment().startOf('day').toDate(); // Dec 06 00:00:00
const end = moment().endOf('day').toDate(); // Dec 06 23:59:59
const d = moment(1767139200000).tz('America/New_York').format('ha'); // 7am EST

4
投票

使用外部 Javascript 库并不那么容易...根据您想要使用它的上下文(文档嵌入脚本的 Web 应用程序),方法会有所不同。

我没有在客户端 JavaScript 中尝试它,我不确定 caja 是否会允许它,但我发现 这篇文章展示了使用用户构建的 Google 脚本库来包含它的可能方法,如果我阅读了发布它似乎有效...

“用户”是一名 Google 开发人员,因此他确切地知道自己在说什么;)如果它对您有用,请在此处更新。


1
投票

您可以按照以下步骤在 Google Apps 脚本中使用 Moment.js 库:

  1. 转到 Google 表格/文档/幻灯片中的“工具”>“脚本编辑器”,打开 Google Apps 脚本编辑器。

  2. 在脚本编辑器中,单击“资源”>“库”。

  3. 在“添加库”字段中,输入 Moment.js 的以下脚本 ID:“15hgNOjKHUG4UtyZl9clqBbl23sDvWMS8pfDJOyIapZk5RBqwL3i-rlCo”

  4. 从“版本”下拉列表中选择最新版本的 Moment.js。

  5. 单击“添加”将 Moment.js 库添加到您的脚本中。

  6. 您现在可以在代码中使用 Moment.js 函数。例如,要获取当前日期和时间,可以使用以下代码:

var now = Moment.moment();
Logger.log(now.format('MMMM Do YYYY, h:mm:ss a'));
© www.soinside.com 2019 - 2024. All rights reserved.