Google 日历无法识别不在整点的 EXDATES?
Google Calendar not recognizing EXDATES that aren't on the hour?
我正在生成一个应忽略节假日事件的 ics,并使用 EXDATE 参数来完成此操作。
我的代码在 Outlook 中工作,它只需要为 EXDATE 确定日期,但是 Google 日历要求时间也存在。
不幸的是,Google 日历无法识别我对中午之后发生的事件的 EXDATES。
while(start < end)
{
if(iSholiday(new Date(start)))
{
//Google Calendar only recognizes the Exdate parameter if it's at the same time as the regular event.
start.setHours(eventTime.getHours(), eventTime.getMinutes());
exDateStr += start.toISOString() +','; //Of the format 2015-09-07T17:40:00.000Z
}
//Advance day to tomorrow
start = new Date(start.setDate(start.getDate() + 1));
同样,这适用于早上发生的事件,但不适用于中午之后发生的事件。
编辑:
我让它返回了正确的日期,但仍然只表现得好像应该忽略中午之前的日期。
如图:我的每个 exdate 字符串。只有 8:00 和 11:00 有效
图片:(可能)与 Google 日历一起使用的其他 exdate 字符串。
编辑 2 我还注意到我在中午之后的所有活动都有分钟,而早上的活动则没有。 Google 似乎无法识别不在整点发生的事件。
编辑 3 我已经包含了我的 RRULE。
var rule = {
freq: "WEEKLY",
until: new Date(end.setHours(1,0)),
};
...[省略代码]
var calendarEvent = [
'BEGIN:VEVENT',
'CLASS:PUBLIC',
'TZID:US/Central', //Force Central
'DESCRIPTION:' + description,
'DTSTART;VALUE=DATE-TIME:' + start,
'DTEND;VALUE=DATE-TIME:' + end,
'LOCATION:' + location,
'SUMMARY;LANGUAGE=en-us:' + subject,
'EXDATE;TZID=US-Central:' + exdates, //Force Central, exdates is a formatted string containing dates to skip (Holidays), as per the RRUle standard.
'TRANSP:TRANSPARENT',
'END:VEVENT'
];
];
if (rruleString) {
calendarEvent.splice(4, 0, rruleString);//Example: RRULE:FREQ=WEEKLY;UNTIL=20151212T000000Z;BYDAY=TU,TH
}
calendarEvent = calendarEvent.join(SEPARATOR);
calendarEvents.push(calendarEvent);
return calendarEvent;
},
编辑 4 我已经包含了 12:40 事件的 Vcalendar:
BEGIN:VEVENT
CLASS:PUBLIC
TZID:US/Central
DESCRIPTION:Class
RRULE:FREQ=WEEKLY;UNTIL=20151212T000000Z;BYDAY=TU,TH
DTSTART;VALUE=DATE-TIME:20150825T124040
DTEND;VALUE=DATE-TIME:20150825T140000
LOCATION:MOL-BIO 1414
SUMMARY;LANGUAGE=en-us:COM S 311
EXDATE;TZID=US-Central:20150907T124000000,20151123T124000000,20151124T124000000,20151125T124000000,20151126T124000000,20151127T124000000
TRANSP:TRANSPARENT
END:VEVENT
我使用的 ics.js 叉有行
var start_seconds = ("00" + (start_date.getMinutes().toString())).slice(-2);
而不是
var start_seconds = ("00" + (start_date.getSeconds().toString())).slice(-2);
导致开始时间为 12:10:10 而不是 12:10:00。感谢用户Luc帮我找到问题!
我正在生成一个应忽略节假日事件的 ics,并使用 EXDATE 参数来完成此操作。
我的代码在 Outlook 中工作,它只需要为 EXDATE 确定日期,但是 Google 日历要求时间也存在。
不幸的是,Google 日历无法识别我对中午之后发生的事件的 EXDATES。
while(start < end)
{
if(iSholiday(new Date(start)))
{
//Google Calendar only recognizes the Exdate parameter if it's at the same time as the regular event.
start.setHours(eventTime.getHours(), eventTime.getMinutes());
exDateStr += start.toISOString() +','; //Of the format 2015-09-07T17:40:00.000Z
}
//Advance day to tomorrow
start = new Date(start.setDate(start.getDate() + 1));
同样,这适用于早上发生的事件,但不适用于中午之后发生的事件。
编辑: 我让它返回了正确的日期,但仍然只表现得好像应该忽略中午之前的日期。
如图:我的每个 exdate 字符串。只有 8:00 和 11:00 有效
图片:(可能)与 Google 日历一起使用的其他 exdate 字符串。
编辑 2 我还注意到我在中午之后的所有活动都有分钟,而早上的活动则没有。 Google 似乎无法识别不在整点发生的事件。
编辑 3 我已经包含了我的 RRULE。
var rule = {
freq: "WEEKLY",
until: new Date(end.setHours(1,0)),
};
...[省略代码]
var calendarEvent = [
'BEGIN:VEVENT',
'CLASS:PUBLIC',
'TZID:US/Central', //Force Central
'DESCRIPTION:' + description,
'DTSTART;VALUE=DATE-TIME:' + start,
'DTEND;VALUE=DATE-TIME:' + end,
'LOCATION:' + location,
'SUMMARY;LANGUAGE=en-us:' + subject,
'EXDATE;TZID=US-Central:' + exdates, //Force Central, exdates is a formatted string containing dates to skip (Holidays), as per the RRUle standard.
'TRANSP:TRANSPARENT',
'END:VEVENT'
];
];
if (rruleString) {
calendarEvent.splice(4, 0, rruleString);//Example: RRULE:FREQ=WEEKLY;UNTIL=20151212T000000Z;BYDAY=TU,TH
}
calendarEvent = calendarEvent.join(SEPARATOR);
calendarEvents.push(calendarEvent);
return calendarEvent;
},
编辑 4 我已经包含了 12:40 事件的 Vcalendar:
BEGIN:VEVENT
CLASS:PUBLIC
TZID:US/Central
DESCRIPTION:Class
RRULE:FREQ=WEEKLY;UNTIL=20151212T000000Z;BYDAY=TU,TH
DTSTART;VALUE=DATE-TIME:20150825T124040
DTEND;VALUE=DATE-TIME:20150825T140000
LOCATION:MOL-BIO 1414
SUMMARY;LANGUAGE=en-us:COM S 311
EXDATE;TZID=US-Central:20150907T124000000,20151123T124000000,20151124T124000000,20151125T124000000,20151126T124000000,20151127T124000000
TRANSP:TRANSPARENT
END:VEVENT
我使用的 ics.js 叉有行
var start_seconds = ("00" + (start_date.getMinutes().toString())).slice(-2);
而不是
var start_seconds = ("00" + (start_date.getSeconds().toString())).slice(-2);
导致开始时间为 12:10:10 而不是 12:10:00。感谢用户Luc帮我找到问题!