Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我在google apss脚本中出现错误;您不能在过去安排活动”;_Javascript_Date_Google Apps Script - Fatal编程技术网

Javascript 为什么我在google apss脚本中出现错误;您不能在过去安排活动”;

Javascript 为什么我在google apss脚本中出现错误;您不能在过去安排活动”;,javascript,date,google-apps-script,Javascript,Date,Google Apps Script,我正试图找出如何在谷歌应用程序脚本中为函数创建一次性触发器 基本上我希望能够安排一个活动,比如说明天下午2点。我不希望它是一个重复发生的事件(我看到谷歌的所有文档都是关于重复发生的事件) 我一直收到这个错误异常:您不能在过去安排事件。(第17行,文件“代码” 欢迎任何解释/帮助 function trigger(){ var rawdate = "2020-07-29T11:30"; var time = rawdate.substr(11).split(':'); va

我正试图找出如何在谷歌应用程序脚本中为函数创建一次性触发器

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

我一直收到这个错误
异常:您不能在过去安排事件。(第17行,文件“代码”

欢迎任何解释/帮助

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()方法中:

现在,您不需要:

  • .inTimezone(“美国/纽约”)
    从时差开始 从正确的时区
  • .atDate()
    ,因为脚本将自动计算金额 脚本将基于计划日期运行后的小时数
最后但并非最不重要的一点是,rawdate可以直接传递给新的Date()对象:


如果正在使用
after()
方法,则不应使用
atDate()
方法。我猜
atDate()方法
方法首先被评估,因为您使用的是今天的日期,所以它将日期评估为今天,就在一天开始的午夜之后,这已经过去了。今天的00:00已经过去了。
after()
方法不会给
atDate()方法添加时间。
after()方法
方法自动确定创建时的当前时间戳是什么,然后再从那里开始。明白了,有没有想法如何从日期和时间戳中创建我想要的内容。如何为将来的某个时间安排事件?(我从html中的用户处获得输入)谢谢!我试过了,但它只运行了小时,你能修改你的答案以包含分钟吗?如果我把它安排在一周后,会不会有问题?会不会有大毫秒数的问题?@jack我编辑了我的答案。它现在也考虑分钟。时间现在返回一个十进制数,因此它包含分钟。
new Date(new Date().toLocaleString(“en-US”,…)
令人担忧。由于明显的原因,实现不需要解析toLocaleString的输出,也可能不需要。
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();
}
new Date(rawdate)