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



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

我需要为我的业务创建一个活动预订系统。我创建了一个谷歌表格,将预订输入电子表格,然后我需要一些代码来自动将这些数据转移到我账户中的相关谷歌日历中。我找到了一个人来创建这个代码,并与他们共享了谷歌表单/电子表格,这样他们就可以创建代码。

以下是他们创建的代码:

我可以在表格中输入信息,进行子列表,它们都出现在正确的日期,你可以从代码中看到,它将根据开始时间(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
}

好吧,我觉得我是个白痴。。。。。。。事实证明,这并不是一个真正的脚本问题,而是一个夏令时问题,因为只有提前一天的结果出现在2013年4月1日之后。我将日历、表格/电子表格和脚本的时区设置为GMT+0000。我只是简单地将它们全部重置为"GMT+0000无夏令时",这似乎解决了问题。我建议任何有类似日期问题的人这样做,日期被推迟一天或时间被推迟一小时。

相关内容

  • 没有找到相关文章

最新更新