我一直在遇到Google脚本的额外问题。波纹管易于理解的代码段:
//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);
}
如果未提供now
,则此代码段将获得working_day
。一旦具有有效的Date
实例,它就会尝试使用Utilities
方便的函数来获取工作日和当前时间。
如果我从编辑器手动运行此代码段,则没问题,输出是预期的。
但是,如果我将crontab执行设置为每小时一次,则此代码会引发错误
最奇怪的一点是意外的javaobject
值,我不知道为什么working_day
会得到这种实例类型。...
你能帮助我吗?谢谢
答案 0 :(得分:2)
大概您的函数run()调用了其他一些函数,该函数需要时区,星期几和当前时间。在这种情况下,由于触发器按周报告的方式,我可能会完全避免使用事件对象,而是这样做。
function run(){
var dt=new Date();
var timeZone = Session.getScriptTimeZone();
var curr_day = dt.getDay();//0=Sunday 6=Saturday
var curr_hour = dt.getHours();0-23
Logger.log('%s,%s,%s',timeZone,curr_day,curr_hour);
}
因此,无论是通过基于计时器的触发器触发还是手动运行,它都将以相同的方式运行。这将花费更长的时间,但不会那么多。