脚本时区设置为Etc / GMT
我接受来自用户的日期(使用datetime-local 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
调用触发器如何在2017-06-21T14:31当地时间制作代码以调用触发器?
答案 0 :(得分:1)
inTimezone(timezone)
方法只接受有效的"长格式" JODA时区。
您已获得默认日历时区:
CalendarApp.getDefaultCalendar().getTimeZone()
返回"长格式" JODA类型时区,这就是inTimezone()
方法所需的参数。
因此,您不需要从用户那里获取2017-06-21T14:31
信息,除非他们的默认日历时区不与他们当地的时间。如果您的情况是,默认日历时区与其计算机上的当地时间之间存在差异; 和您想要考虑到这种差异,然后您做需要获取当地时区。
如果您确实需要获得与默认日历时区不同的时区,则用户需要选择时区,或者您可以尝试以其他方式获取时区。
在你的问题中,你说你得到的时间是:2017-06-21T14:31
当地时间2017-06-21T14:31
中没有时区信息。如果它有偏移量,那么你可以使用偏移量来回到长格式"时区。
您可以拥有一个供用户选择的下拉列表,其中包含有效的值"长格式" 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);
然后你需要将偏移量转换为一个值&#34; long format&#34;时区。你可以通过列表&#34;硬编码&#34;来做到这一点。进入你的代码,并做一个&#34;查找&#34;或构建一个&#34; Etc / GMT + ##&#34;带代码的时区。偏移量与GMT数字相反。标准偏差为负12是+ 12 GMT
-12:00 --- Etc / GMT + 12