2017-06-22 80 views
1

腳本時間設置爲格林尼治標準時間00當地時間VS腳本時間和觸發時間在谷歌Apps腳本

的腳本接受的日期和時間從用戶

用戶設置本地日期時間與日期時間字段

用戶點擊設置按鈕

這將創建在GMT時間觸發,如何使其在本地時間觸發?

function onOpen() { 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
     .createMenu('Custom Menu').addItem('Show sidebar', 'showSidebar').addToUi(); 
} 

function showSidebar() { 
    var html = HtmlService.createHtmlOutputFromFile('Sidebar').setTitle('My custom sidebar').setWidth(300); 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
     .showSidebar(html); 
} 

function sendEmail() { 
    GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), 'Reminder C Email', 'Reminding you about...'); 
} 

function create(AT) { 
    SpreadsheetApp.getUi().alert(AT) 
    var at = moment(AT); 
    ScriptApp.newTrigger('sendEmail').timeBased().at(new Date(at)).inTimezone(getDefaultUserTimeZone()).create(); 
} 
//script timezone is GMT 00 
function getDefaultUserTimeZone() { 
    if (CalendarApp.getDefaultCalendar()) return CalendarApp.getDefaultCalendar().getTimeZone(); 
    else return 'Etc/GMT'; 
} 

回答

1

如果您訪問日曆的唯一原因是獲取默認時區,那麼我不會那樣做。您可以從電子表格中獲取默認的用戶時區。

ssTimeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); 

而且由於您已經在使用電子表格,爲什麼不使用它?

function create(AT, l) 
{ 
    var ssTimeZone; 

    //SpreadsheetApp.getUi().alert(AT) 
    var at = moment(AT); 

    var offsetTime = new Date(new Date(at).getTime() + l * 60 * 1000); 

    ssTimeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); 

    //showAlert(offsetTime) 
    ScriptApp.newTrigger('sendEmail').timeBased() 
    .at(new Date(offsetTime)) 
    .inTimezone(ssTimeZone) 
    .create(); 

}