为应用程序脚本触发器设置本地日期时间

Setting local date time for apps script triggers

脚本时区设置为Etc/GMT

我正在接受用户的日期(使用本地日期时间 yyyy-MM-ddTHH:mm)来调用触发函数。

var at = moment(mydate); // say user sets mydate (local IST) as 2017-06-21T14:31 

ScriptApp.newTrigger('onClock').timeBased().at(new Date(at)).inTimezone(CalendarApp.getDefaultCalendar().getTimeZone()).create();

这将在 2017-06-21 20:01 当地时间 IST[​​=11=] 调用触发器

如何编写代码在当地时间 2017-06-21T14:31 调用触发器?

inTimezone(timezone) 方法只接受有效的 "long format" JODA 时区。

JODA.org

您已经获得默认日历时区:

CalendarApp.getDefaultCalendar().getTimeZone()

returns "long format" JODA 类型时区,这就是 inTimezone() 方法需要的参数。

因此,您不需要从用户那里获取 2017-06-21T14:31 信息,除非 他们的默认日历时区是 NOT 和他们当地时间一样。如果您的情况是默认日历时区与其计算机上的本地时间之间存在差异; 你想解释那个差异,然后需要得到当地时区。

如果您确实需要获取与默认日历时区不同的时区,那么要么用户需要 select 一个时区,要么您可以尝试以其他方式获取.

在你的问题中,你说你得到的时间是:2017-06-21T14:31

当地时间 2017-06-21T14:31 中没有时区信息。如果它有偏移量,那么您可以使用偏移量返回到 "long format" 时区。

您可以有一个下拉列表供用户选择,其中的值是有效的 "long format" JODA 时区。

<select>
  <option value="Etc/GMT+12">GMT +12</option>
  <option value="Etc/GMT+11">GMT +11</option>
</select>

如果您确实需要从客户端代码获取用户本地时区,请参阅以下 Stack Overflow 答案:

Stack Overflow answer - Getting the client's timezone in JavaScript

var offset = new Date().getTimezoneOffset();
console.log(offset);

然后您需要将偏移量转换为值 "long format" 时区。您可以通过在代码中添加列表 "hard coded" 并使用代码执行 "look up" 或构建 "Etc/GMT+##" 时区来实现。偏移量与 GMT 数字相反。负 12 的标准偏移量是 +12 GMT

偏移量 --- 长格式

-12:00 --- Etc/GMT+12