Как использовать momentsjs в скрипте Google Apps?

Я пытаюсь использовать библиотеку momentjs в скрипте Google Apps, но я не понимаю, как это сделать. Я не уверен, как добавить библиотеку, поэтому, очевидно, работает что-то вроде следующих результатов в "ошибка ссылки:"момент" не определен":

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

4 ответов


использование внешней библиотеки Javascript не так просто... В зависимости от контекста, в котором вы хотите его использовать (webapp встроенного скрипта документа), подход будет другим.

Я не пробовал это в клиентском JavaScript, и я не уверен, что caja позволит это, но я нашел этот пост, который показывает возможный способ включить его с помощью библиотеки сценариев Google что у пользователя есть сборка, и если я прочитаю сообщение, оно, кажется, работает...

"пользователь" - это Google developper, чтобы он точно знал, о чем он говорит ;) пожалуйста, обновите здесь, если это сработало для вас.


большинство людей пытаются использовать библиотеку с ключом, заканчивающимся на 48. Эта библиотека довольно устарела (это версия 2.9, которая довольно старая).

используя eval и UrlFetchApp.fetch момент.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)
}

вы можете либо принять момент.js на вашем собственном сервере или используйте CDN как Cloudflare CDN для ссылки на библиотеку.

для cloudflare, вот страница, которая показывает момент.версий 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);
}

вы можете добавить момент и момент.TZ to App скрипты, создав новый Script file и добавляем следующий код:

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

  }
}

это использует службу кэша для уменьшения вызовов туда и обратно, и вы можете изменить его, чтобы включить подмножество данных, если хотите.

спасибо отель Arosa для начала меня!


Я создал обновленную версию момент для Appscript (версия V2.19.3 с районов). Это библиотека-Mlj57Yi463PVmHumHxq4bkaUlUqvRc4Kt, чтобы начать использовать его добавить библиотеку, а затем сделать момент глобальной переменной, как показано ниже.

var moment = Moment.moment