web-dev-qa-db-ja.com

Google Apps Scriptでmomentsjsを使用するにはどうすればよいですか?

Google Apps Scriptでmomentjsライブラリを利用しようとしていますが、その方法がわかりません。ライブラリを追加する方法がわからないため、明らかに次のようなものを実行すると、「参照エラー: 'モーメント'が定義されていません」という結果になります。

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

外部Javascriptライブラリの使用はそれほど簡単ではありません...使用するコンテキスト(ドキュメント埋め込みスクリプトのWebアプリケーション)に応じて、アプローチは異なります。

私はクライアントJavaScriptでそれを試していませんでした、そしてcajaがそれを許可するかどうかはわかりませんが、私は見つけました Google Script Libraryを使用してそれを含めるための可能な方法を示すこの投稿 ユーザーがビルドし、投稿を読んだらうまくいくようです...

「ユーザー」はGoogleの開発者であるため、彼は自分が何について話しているのかを確実に知っています;)うまくいった場合は、ここで更新してください。

3
Serge insas

ほとんどの人は、キーが48で終わるライブラリを使おうとします。そのライブラリはかなり古いものです(かなり古いバージョン2.9です)。

evalおよびUrlFetchApp.fetch moment.jsまたはその他の外部ライブラリを使用すると、GoogleAppスクリプトで簡単に使用できます。

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をホストするか、cloudflareCDNなどの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);
}
14
apadana

Appscript用にmomentの更新バージョンを作成しました(ロケールを使用したv2.19.3)。これはライブラリです-Mlj57Yi463PVmHumHxq4bkaUlUqvRc4KT使用を開始するには、ライブラリを追加してから、次のようにモーメントをグローバル変数にします。

var moment = Moment.moment
8
Jason Allshorn

新しい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 始めてくれてありがとう!

2
OsulliP