2017-06-21 97 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

我不明白。你沒有得到什麼? –