2017-06-22 111 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(); 

}