【问题标题】:Get "Recurrence" from Google Calendar API Event (React, Javascript)从 Google 日历 API 事件(React、Javascript)中获取“重复”
【发布时间】:2017-09-18 23:35:26
【问题描述】:

我正在尝试使用 google 日历 api 获取事件的重复规则 (RRULE),但它正在返回 undefined

据说,每个事件都有一个“重复值,如here所述:

recurrence[] 列表

按照 RFC5545 的规定,重复事件的 RRULE、EXRULE、RDATE 和 EXDATE 行列表。请注意,该字段中不允许使用 DTSTART 和 DTEND 行;事件开始和结束时间在开始和结束字段中指定。对于单个事件或重复事件的实例,该字段被省略。
可写

作为注释,

NO ISSUE:SET在创建事件时执行以下操作时的“重复”值:

var event = {
   'summary': this.props.user.calendarEventTitle,
   'start': {
     'dateTime': this.props.user.calendarEventStartDateTime,
     'timeZone': this.props.user.calendarEventTimeZone
   },
   'end': {
     'dateTime': this.props.user.calendarEventEndDateTime,
     'timeZone': this.props.user.calendarEventTimeZone
   },
  "recurrence": [
     "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z",
  ]
};


var request = window.gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

request.execute(function(resp) {
  console.log('resp = ' + resp);
});

问题:在获取执行以下操作的事件时,无法GET“重复”值:

listUpcomingEvents() {
   window.gapi.client.calendar.events.list({
     'calendarId': 'primary',
     'timeMin': (new Date()).toISOString(),
     'showDeleted': false,
     'singleEvents': true,
     'orderBy': 'startTime'
   }).then(function(response) {
     var events = response.result.items;

     if (events.length > 0) {
       var eventsArr = [];
       for (var i = 0; i < events.length; i++) {
         var event = events[i];
         var startDate = event.start.dateTime;
         var endDate = event.end.dateTime;
         if (!startDate) {
           startDate = event.start.date;
         }
         if (!endDate) {
           endDate = event.end.date;
         }
         var reminders = event.reminders.overrides;

         console.log('event.recurrence = ' + event.recurrence);
         {Object.keys(event).map(function(key) {
              console.log('>Key (event): ' + key + ", Value (event): " 
+ event[key]);
          })}

注意:我添加了上面的日志以打印出事件对象的每个键和值,但我仍然没有看到“重复”键。如果此对象中没有,如何获取创建此事件的重复规则?可能对 repeatingEventID 做点什么?

         var rowArray = {
           id: event.id,
           title: event.summary,
           start: startDate,
           end: endDate,
           allDay: false,
           location: event.location,
           description: event.description,
           timeZone: event.start.timeZone,
           reminders: event.reminders.overrides,
           recurrence: event.recurrence  //ISSUE: RETURNS UNDEFINED
         };
         eventsArr.push(rowArray);
         this.setState({
           eventArray: eventsArr
         })
       }
     } else {
       console.log('No upcoming events found.');
     }
     const { calendar } = this.refs;
}

几乎看起来here 一旦事件发生就没有“重复”属性(只有重复ID)。

有什么建议吗?

【问题讨论】:

    标签: javascript reactjs calendar google-calendar-api


    【解决方案1】:

    对于将来有类似问题的任何人,recurringEventId 可用于获取包含原始事件重复值的不同事件。

    你可以这样做。

    像这样获取周期性事件 ID:

    var recurringEventID = event.recurringEventId

    然后使用该 id 为 recurringEventId(而不是 event 本身的 id)再次调用 Google Calendar API:

    var requestRecurringEvent = window.gapi.client.calendar.events.get({
            'calendarId': 'primary',
            'eventId': payload
          });
          requestRecurringEvent.execute(function(resp) {
            console.log('requestRecurringEvent = ' + resp);
            console.log('requestRecurringEvent.recurrence = ' + resp.recurrence);
            recurrence = resp.recurrence;
    
            console.log('recurrence (inside execute)= ' + recurrence); //NO ISSUE (YET): recurrence (inside execute) = RRULE:FREQ=WEEKLY;COUNT=10
    
            return recurrence;
          });
    

    就是这样!

    【讨论】:

    • 你成就了我的一天!谢谢!
    • @Riccardo,很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多