【发布时间】:2019-11-22 20:46:21
【问题描述】:
我一直面临 google 脚本的一个额外问题。下面是通俗易懂的sn-p:
//https://stackoverflow.com/a/7390612/2873381
function typeOf(obj) {
return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
function run(working_day){
if (!working_day){
working_day = new Date();
}
console.log("working_day");
console.log(typeOf(working_day));
console.log(working_day);
var timeZone = Session.getTimeZone();
var curr_day = Utilities.formatDate(working_day, timeZone, "F");
var curr_hour = Utilities.formatDate(working_day, timeZone, "H");
console.log(curr_day);
console.log(curr_hour);
}
如果没有提供working_day,这个sn-p 会得到now。一旦它有一个有效的Date 实例,它就会尝试使用Utilities 方便的函数来获取星期几和当前时间。
如果我从编辑器手动运行这个 sn-p,没有问题,输出是预期的 .
但是,如果我设置一个 crontab 执行,比如说每小时,这段代码会引发错误
这里最奇怪的一点是出乎意料的javaobject 值,我不知道为什么working_day 会得到这个实例类型......
你能帮助我吗?谢谢
【问题讨论】:
-
当您开始使用基于时间的触发器时,您的参数已被事件对象填充。
-
感谢您准确指出线索!我添加了一个简单的 if 检查类型,允许脚本知道它是计划运行还是手动运行。
//time-triggered execution if (typeOf(working_day)=="javaobject"){ working_day = getNow(); }有更优雅的解决方案吗? -
就用
working_day = new Date();?