2017-06-21 54 views
1

该脚本时区被设置为其他/ GMT设置本地日期时间为应用脚本触发

我接受的日期(使用日期时间本地YYYY-MM-DDTHH:毫米)从用户调用一个触发函数。

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年6月21日20:01当地时间IST

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

回答

1

inTimezone(timezone)方法只接受有效的“长格式”JODA时区。

JODA.org

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

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 answer - Getting the client's timezone in JavaScript

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

然后,你将需要转换的偏移到“长格式”时区的值。你可以通过在你的代码中加入一个“硬编码”的列表来做到这一点,并用代码做一个“查找”或构建一个“Etc/GMT + ##”时区。偏移量与GMT数字相反。一个标准的负12的偏移量是+12 GMT

失调---长格式

-12:00 --- ETC/GMT + 12

+0

首先得到补偿'VAR偏移量=新的日期( ).getTimezoneOffset(); console.log(offset);'你有这样做吗? –

+0

我不明白。你没有得到什么? –

相关问题