澳大利亚与美国日期问题(我想!)

时间:2012-11-01 02:21:43

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

我创建了一个电子表格,可以从Google电子表格列表中创建Google日历活动。

过去一个月我在团队中成功使用了这个,现在我遇到了所有可怕日期类型的问题。

据我了解,电子表格时区将全面用于确定使用.getValue()等函数的日期。现在,当我尝试发送11月份名单的日历活动时,它可以正常工作,直到2012年11月12日到2012年11月13日为止。

该脚本将正确获取日期12/11/2012(var type:Date),并将使用它来创建事件。当它试图获得下一个日期时,它将只返回一个空白字符串。然后,Utilities.formatDate()函数抛出一个错误,指出它无法格式化String变量。

下图显示了11月10日的代码和调试信息。如果它正常工作,这就是第13个应该如何看待。 enter image description here

下图显示了11月13日的代码,错误和调试信息。你可以看到getDate是一个空白字符串,而在10日它是一个日期。 (getDate变量之后的任何变量信息都是从上一次迭代中遗留下来的) enter image description here

我一直绞尽脑汁解释这一点。 .getValue()引用的单元格都包含有效的澳大利亚日期。它已经适用于整个十月份,并且仅在日期晚于13/11/2012时才出现问题(我也使用17/11/2012进行了相同的结果测试)。

这就是我的想法:.getValue返回13/11/2012,但后来脚本将此视为美国日期。因此,它决定没有第13个月并且回落到空字符串。此解释并未考虑10月事件的正确使用。该脚本处理13/10/2012就好了。

如果您有任何建议,请提供给我们,我在我的智慧结束!

编辑:根据请求添加代码:

function sendInvites() {
  // Gather Prelim Information
  var splash = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Splash");
  var nameRange = splash.getRange("A6:B26"); // Need to change this to be the full staff list in Splash

 // var inviteSheet = Browser.inputBox("Sheet to send invites from (Number)", Browser.Buttons.OK_CANCEL)
  var days = SpreadsheetApp.getActiveSpreadsheet().getSheets()[2];
  var dayRange;

  //Initiate iteration through Names, according to the Splash sheet
  for(nameRow=nameRange.getRow(); nameRow<=26; nameRow++){ //Change to Corresponding iterate
    // Gather Name and Email information for the each person
    var col = nameRange.getColumn();
    var row = nameRow;
    var name = splash.getRange(row, col).getValue();
    var email = splash.getRange(row, col+1).getValue();
    var eventChoice = splash.getRange(row, col+2).getValue();

    //Proceed if all information and permission exists
    if(name != "" && email != "" && eventChoice == "Yes"){
      var cal = CalendarApp.getCalendarById(email);

      //Initiate iteration through Days, according to the Roster
      for(i=0; i<=6; i++){
        //Specify Day Ranges
        switch(i){
          case 0: //Saturday
            dayRange = days.getRange("A1:O6"); break;
          case 1: //Sunday
            dayRange = days.getRange("A10:O15"); break;
          case 2: //Monday
            dayRange = days.getRange("A19:O41"); break;
          case 3: //Tuesday
            dayRange = days.getRange("A45:O67"); break;
          case 4: //Wednesday
            dayRange = days.getRange("A71:O93"); break;
          case 5: //Thursday
            dayRange = days.getRange("A97:O119"); break;
          case 6: //Friday
            dayRange = days.getRange("A123:O145"); break;
        }

        //Find Name in dayRange
        for(dayRow=dayRange.getRow(); dayRow<=dayRange.getLastRow(); dayRow++){
          var searchCol = dayRange.getColumn();
          var searchRow = dayRow;        
          var searchName = days.getRange(searchRow, searchCol).getValue();

          if (name==searchName){
            // Gather and format Date and Time information for invitation
            var eventName = "Library & IT Help";
            var getDate = dayRange.getValue();

            var date = Utilities.formatDate(getDate, "GMT+1000", "EEE MMM dd yyyy");
            var startCell = days.getRange(searchRow, searchCol+1).getValue();
            var endCell = days.getRange(searchRow, searchCol+2).getValue();

            if (startCell != ""){
              var startTime = date + " " + Utilities.formatDate(startCell, "GMT+1000", "HH:mm:ss");
              var endTime = date + " " + Utilities.formatDate(endCell, "GMT+1000", "HH:mm:ss");
              //Create a calendar event with the details above
              cal.createEvent(eventName, new Date(startTime), new Date(endTime));
            }
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您需要确保脚本本身正在使用您正在使用的区域设置。您可以在脚本编辑器中设置&gt;文件&gt;属性(来自内存)。