谷歌电子表格到日历脚本更改或编辑时区触发条目出现在错误的一天

时间:2012-07-25 00:42:36

标签: google-apps-script timezone google-sheets google-calendar-api

这是我从一开始的问题......我真的需要某人的帮助......

我需要为我的公司创建一个活动预订系统。我创建了一个Google表单,用于在电子表格中输入预订,然后我需要一些代码来自动将此数据传输到我帐户中的相关Google日历。我发现有人创建此代码,与他们共享谷歌表单/电子表格,以便他们可以创建代码。

以下是他们创建的代码:

我可以将信息输入到表单中,制作子目录并且它们都出现在正确的日期,您可以通过代码看到它将创建一个全天事件(如果我已经在其中一个列中全天输入)在开始时间(startdt)。

我的问题是,当我提交时,我的日历中提前一天开始出现正确的条目。这发生在我在晚上11点之后提交的任何条目中。我不确定问题是什么,但我相信它可能与时区有关。 我的总部设在英国,GMT + 0000,为我制作剧本的人都在印度。我已经读过,当您更改脚本的时区时,触发器不会随之自动更改(它们保留为原始时区)。

这可能导致我的条目突然出现在我的日历中的一天,如果我在一定时间后提交它们,即使电子表格中的所有内容都是正确的???

我可以通过编辑代码来临时解决问题,根据结束时间(enddt)而不是startdt创建全天事件但这只能在短时间内工作..直到上午11点可能然后我必须更改代码? ?这一切都非常混乱。

如果有时区问题可以有人请告诉我如何找出我的触发器的时区,如果它们是错的,我如何在脚本中编辑我的触发器的时区请。我真的被困住了,因为我需要这个来预订我的商业而不会让他们出现错误的日期。

我的所有日​​历,电子表格,表单和脚本均为GMT + 0000

我将在下面复制并粘贴我的脚本并加强我可以编辑的全天事件部分,以便临时排序问题,直到它再次变回,如果有帮助的话?

var ss = SpreadsheetApp.getActive();
/*function onEdit(e) {
   var doc = SpreadsheetApp.getActiveSheet();
setRowColors();
Browser.msgBox("Trigger it");
}*/

function onEdit(event){
  var doc = SpreadsheetApp.getActiveSheet();
  var r = event.source.getActiveRange();
  var currentCol = r.getColumn();
 // Browser.msgBox("currentCol:- "+currentCol);
  if(currentCol!= 10 && currentCol!= 11 && currentCol!= 12)
  {
  var currentRow = r.getRow();
 // Browser.msgBox("currentRow:- "+currentRow);
  var v = parseInt(currentRow);
   var dataRange = doc.getRange(v, 10, 1,3);
  var data = dataRange.getValues();
   for (i in data) {
    var row = data[i];
    var tom = row[0].toLowerCase();  

   // Browser.msgBox(tom);
    var steven = row[1].toLowerCase();
    var lucy = row[2].toLowerCase();
    if(tom=="added" )
     doc.getRange(v, 10, 1, 1).setValue("ADD"); 
     if(steven=="added" )
     doc.getRange(v, 11, 1, 1).setValue("ADD"); 
      if(lucy=="added" )
     doc.getRange(v, 12, 1, 1).setValue("ADD"); 

   }

}
    // calscript();
   //Browser.msgBox("Done:-");
}


function calscript() {
  //Browser.msgBox("start calscript:-");
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, sheet.getMaxRows(),35);
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    var title = row[32].toString();
    // Browser.msgBox(title);// First column
    var desc = row[34];       // Second column
    var tstart = row[2];
   // Browser.msgBox(tstart);// First column
    var tstop = row[3];
   // Browser.msgBox(tstop);// First column
    var loc = row[31];
    var tom=row[9].toLowerCase();
    var steven=row[10].toLowerCase();
    var lucy=row[11].toLowerCase();
    var day=row[4].toLowerCase();
    if(tom=="add")
    {
      AddtoTom(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,10).setValue('Added'); 
    }
    if(steven=="add")
    {
      AddtoSteven(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,11).setValue('Added'); 
    }
    if(lucy=="add")
    {
      AddtoLucy(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,12).setValue('Added'); 
    }
    //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
   // cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
 }
}
function AddtoTom(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Tom");
  if(day=="all day")
    **cal.createAllDayEvent(title, **startdt,** desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}
function AddtoSteven(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Steven");
 if(day=="all day")
    **cal.createAllDayEvent(title, **startdt**, desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}
function AddtoLucy(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Lucy");
 if(day=="all day")
    **cal.createAllDayEvent(title, **startdt**, desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}

function onOpen() {
   //  Browser.msgBox('start');// First column
  var menuEntries = [];

  menuEntries.push({name: "Add To Calendar", functionName: "calscript"});
  ss.addMenu("Main Menu", menuEntries);
 // Browser.msgBox('end');// First column
}

function onInstall() {
  onOpen();
}

function onFormSubmit()
{

}
function configure() {
 // Browser.msgBox('trigger');// First column
  ScriptApp.newTrigger("calscript").timeBased().everyMinutes(1).create();
  //Browser.msgBox('trigger ends');// First column
}

1 个答案:

答案 0 :(得分:0)

好吧我觉得我是个白痴.......事实证明这不是一个真正的剧本问题,这是一个夏令时问题,因为在4月1日之后出现的一天早期的唯一结果2013我有我的日历的时区,表格/电子表格和脚本设置为GMT + 0000。我只是将它们全部重置为'GMT + 0000没有夏令时',这似乎解决了这个问题。我向有类似日期问题的人推荐这个,日期被推迟一天,或者时间被推迟一个小时。