如何在Google Apps脚本中使用时刻j?

时间:2014-03-14 16:06:31

标签: google-apps-script momentjs

我正在尝试在Google Apps脚本中使用momentjs库,但我不清楚如何这样做。我不确定如何添加库,因此显然运行如下所示的结果“参考错误:'时刻'未定义”:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var difference = a.diff(b);

6 个答案:

答案 0 :(得分:11)

大多数人尝试使用带有以48结尾的密钥的库。该库非常过时(版本2.9很旧)。

使用evalUrlFetchApp.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版本及其网址的页面:

  

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

答案 1 :(得分:3)

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

我没有在客户端JavaScript中尝试它并且我不确定caja会允许它但是我发现用户已经构建了this post that shows a possible way to include it using a Google Script Library并且如果我阅读帖子它似乎工作...

“用户”是Google开发者,因此他确切知道他在说什么;)如果有效,请在此处更新。

答案 2 :(得分:2)

我为Appscript创建了一个更新版本的时刻(带语言环境的v2.19.3)。这是库 - Mlj57Yi463PVmHumHxq4bkaUlUqvRc4KT要开始使用它,请添加库,然后创建一个全局变量,如下所示。

var moment = Moment.moment

答案 3 :(得分:2)

您可以通过创建新的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(cacheToCheck !== 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(UrlFetchApp.fetch(url).getContentText());

  }
}

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

感谢apadana让我入门!

答案 4 :(得分:1)

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

答案 5 :(得分:0)

有一种更好,最好的方式来利用瞬间

请勿使用UrlFetchApp,以避免超出配额,缓存和服务器问题

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

并将完整文件集成到以下屏幕的应用程序脚本中

Moment files in apps script directly

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

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

像下面的例子一样使用它

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