【问题标题】:why do I get an error in google apss script "You cannot schedule a event in the past"为什么我在谷歌应用程序脚本中出现错误“您无法安排过去的活动”
【发布时间】:2020-07-29 15:21:54
【问题描述】:

我正在尝试弄清楚如何在 google 应用程序脚本中为函数创建一次性触发器。

基本上,我希望能够安排一个事件发生,比如说明天下午 2 点。我不希望它成为重复事件(我看到谷歌的所有文档都是关于重复事件的)。

我不断收到此错误Exception: You cannot schedule an event in the past. (line 17, file "Code"

欢迎任何解释/帮助。

function trigger(){

var rawdate = "2020-07-29T11:30";

var time = rawdate.substr(11).split(':');
var durationMilliseconds = time[0] * 3600000 + time[1] * 60000;
var year = rawdate.substr(0,4);
var month = rawdate.substr(5,2);
var date = rawdate.substr(8,2);

ScriptApp.newTrigger("myFunction")
  .timeBased()
  .atDate(year, month, date)
  .after(durationMilliseconds)
  .inTimezone("America/New_York")
  .create();
}

【问题讨论】:

  • 如果正在使用after() 方法,则不应使用atDate() 方法。我猜想首先评估 atDate() 方法,并且因为您使用的是今天的日期,所以它正在将日期评估为今天,就在一天开始的午夜之后,这是过去。今天 00:00 是过去的时间。 after() 方法不会为atDate() 方法增加时间。 after() 方法自动确定创建时的当前时间戳,然后从那里开始。
  • 知道了,任何想法如何创建我想要的日期和时间戳。我如何安排未来某个时间的活动? (我在 html 中从用户那里获取输入)

标签: javascript date google-apps-script


【解决方案1】:

你很亲密。您只需要计算计划(触发)日期时间和当前日期时间之间的差异(以小时为单位)。然后,将小时差添加到 .after() 方法中:

function trigger(){

// Set here the date you want to schedule the one-time trigger
var rawdate = "2020-07-29T21:30";
var today_D = new Date(new Date().toLocaleString("en-US", {timeZone: "America/New_York"}));
var scheduled_D = new Date(rawdate);
var time_af = Math.abs(scheduled_D - today_D) / 36e5;

ScriptApp.newTrigger("myFunction")
.timeBased()
.after(time_af * 60 *60 * 1000)
.create();
}

现在你不需要了:

  • .inTimezone("America/New_York") 因为小时差开始 从正确的时区,
  • .atDate() 因为脚本会自动计算金额 脚本将根据预定日期运行几小时后。

最后但同样重要的是,rawdate 可以直接传递给新的 Date() 对象:

new Date(rawdate)

【讨论】:

  • 谢谢!我试过了,但它只做几个小时,你能修改你的答案以包括分钟吗?如果假设我将它安排在一周后,也会有问题吗,会有任何问题来自大毫秒数吗?
  • @jack 我编辑了我的答案。它现在也考虑分钟数。 time_af 现在返回一个十进制数,因此它包含分钟。
  • new Date(new Date().toLocaleString("en-US", ...)) 令人担忧。实现不需要解析 toLocaleString 的输出,并且出于显而易见的原因可能不需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多