Jar*_*d_C 17 google-apps-script momentjs
我正在尝试在Google Apps脚本中使用momentjs库,但我不清楚如何这样做.我不确定如何添加库,因此显然运行如下所示的结果"参考错误:'时刻'未定义":
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var difference = a.diff(b);
Run Code Online (Sandbox Code Playgroud)
apa*_*ana 13
大多数人尝试使用带有以48结尾的密钥的库.该库非常过时(版本2.9很旧).
使用eval
和UrlFetchApp.fetch
moment.js或任何其他外部库可以在谷歌应用程序脚本中轻松使用.
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)
}
Run Code Online (Sandbox Code Playgroud)
您可以在自己的服务器上托管moment.js,也可以使用像Cloudflare CDN这样的CDN来引用该库.
对于cloudflare,这是显示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);
}
Run Code Online (Sandbox Code Playgroud)
有一种更好、最好的方式来利用时刻
不要使用 UrlFetchApp,以避免超出配额、缓存和服务器问题
下载最新版本的 moment.min.js 和 momemt-timzone.min.js
并将完整文件集成到应用程序脚本中,如下所示
从长远来看,这种方法没有问题,只需在需要时随时更新文件即可。
添加这两个文件后,只需发布一个新版本并将其包含在任何其他脚本中
例如:
然后将像下面的示例一样使用它
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
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以通过创建一个新的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);
}
}
Run Code Online (Sandbox Code Playgroud)
这使用缓存服务来减少往返调用,如果需要,您可以修改它以包含数据子集。
感谢apadana让我开始!
我为Appscript创建了moment的更新版本(带有语言环境的v2.19.3)。这是库-Mlj57Yi463PVmHumHxq4bkaUlUqvRc4KT要开始使用它,请添加库,然后按如下所示将其设置为全局变量。
var moment = Moment.moment
Run Code Online (Sandbox Code Playgroud)
使用外部 Javascript 库并不是那么容易...根据您想要使用它的上下文(文档嵌入脚本的 Web 应用程序),方法会有所不同。
我没有在客户端 JavaScript 中尝试它,我不确定 caja 是否会允许它,但我发现这篇文章展示了一种使用用户构建的 Google 脚本库包含它的可能方法,如果我读了这篇文章,它似乎上班...
“用户”是一名 Google 开发人员,因此他确切地知道自己在说什么;)如果它对您有用,请在此处更新。
归档时间: |
|
查看次数: |
9473 次 |
最近记录: |