从电子表格添加事件时谷歌日历中的不同时间

时间:2014-09-06 07:41:03

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

通过google appscript和spreedsheet添加到Google日历时的时间更改: 应用脚本的代码(仅限时间部分):

function setUpCalendar_(values, range) {
var cal = CalendarApp.createCalendar('Conference Calendar');

Browser.msgBox('Calender time zone: ' + cal.getTimeZone()); 
//to check timezone for debugging.

for (var i = 1; i < values.length; i++) {
var session = values[i];
var title = session[0];
var start = joinDateAndTime_(session[1], session[2]);
var end = joinDateAndTime_(session[1], session[3]);
var options = {location: session[4], sendInvites: true};
var event = cal.createEvent(title, start, end, options)
                .setGuestsCanSeeGuests(false);
//session[5] = event.getId();
   ///====:::: test :::: replacingsession[5] with values[i][5]
   }

range.setValues(values);

// Store the ID for the Calendar, which is needed to retrieve events by ID.
ScriptProperties.setProperty('calId', cal.getId());
}

function joinDateAndTime_(date, time) {
  date = new Date(date);
  date.setHours(time.getHours());
  date.setMinutes(time.getMinutes());
  Browser.msgBox(date); // to check time for debuging.
  return date;
  }

使用脚本链接到电子表格:

https://docs.google.com/spreadsheet/ccc?key=0AorrYgKfVJpQdEdBY2lYdEpIUUc0TlRRUkNlNmRPTWc&usp=sharing

到目前为止采取的措施: 1.将电子表格的时区更改为区域设置。 2.将日历的时区更改为语言环境。

结果: 电子表格和日历中的不同时间。

问题: 必须在电子表格和日历中同时进行。

的引用:

calendarApp createEvent added event on wrong day

How to use timeZone of calendar to set timeZone for date object

1 个答案:

答案 0 :(得分:1)

在使用您的方法将电子表格中的日期和时间加入JavaScript日期对象(一些随机值添加到小时和/或分钟)时,我已经遇到过这种问题,所以我找到了另一种更可靠的方法...(而 - 我承认 - 少学术......)

我在电子表格的副本中进行了测试,当我为会议进行测试时,事件按照应有的方式创建(在加尔各答时间,这对我来说并不完美,但我暂时“移动”以检查结果; - )

这是代码,只需复制并粘贴到您的脚本中即可替换您的函数。

function joinDateAndTime_(date, time){
  var hrs = Number(Utilities.formatDate(time,Session.getScriptTimeZone(),'HH'));
  var min = Number(Utilities.formatDate(time,Session.getScriptTimeZone(),'mm'));
  var sec = Number(Utilities.formatDate(time,Session.getScriptTimeZone(),'ss'));
  Logger.log('date = '+Utilities.formatDate(date, Session.getScriptTimeZone() ,'dd-MMM-yyyy  HH:mm:ss'));
  Logger.log('time = '+hrs+':'+min+':'+sec);
  var dateAndTime = new Date(date).setHours(hrs,min,sec,0);
  Logger.log('full date object = '+Utilities.formatDate(new Date(dateAndTime), Session.getScriptTimeZone() ,'dd-MMM-yyyy  HH:mm:ss'))
  return new Date(dateAndTime);
}

不要忘记检查工作表和脚本的时区......(因为您提到过您尝试了不同的设置)它们当然必须与您的区域和日历相匹配。