Google Apps Scriptでmomentjsライブラリを利用しようとしていますが、その方法がわかりません。ライブラリを追加する方法がわからないため、明らかに次のようなものを実行すると、「参照エラー: 'モーメント'が定義されていません」という結果になります。
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var difference = a.diff(b);
外部Javascriptライブラリの使用はそれほど簡単ではありません...使用するコンテキスト(ドキュメント埋め込みスクリプトのWebアプリケーション)に応じて、アプローチは異なります。
私はクライアントJavaScriptでそれを試していませんでした、そしてcajaがそれを許可するかどうかはわかりませんが、私は見つけました Google Script Libraryを使用してそれを含めるための可能な方法を示すこの投稿 ユーザーがビルドし、投稿を読んだらうまくいくようです...
「ユーザー」はGoogleの開発者であるため、彼は自分が何について話しているのかを確実に知っています;)うまくいった場合は、ここで更新してください。
ほとんどの人は、キーが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を示すページは次のとおりです。
この投稿を書いている時点で、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);
}
Appscript用にmomentの更新バージョンを作成しました(ロケールを使用したv2.19.3)。これはライブラリです-Mlj57Yi463PVmHumHxq4bkaUlUqvRc4KT使用を開始するには、ライブラリを追加してから、次のようにモーメントをグローバル変数にします。
var moment = Moment.moment
新しい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 始めてくれてありがとう!