Calendar 如何合并2个google日历以按顺序显示事件?
我正试图用一个我自己通过谷歌脚本创建的显示来替换我谷歌网站上笨重的谷歌日历议程视图 我可以在页面上获得事件详细信息,但我需要显示多个日历-如何确保项目在页面上的顺序正确,并且不按日历分组 我可以: 每次运行脚本时创建临时日历,合并多个日历(注意-我看不到任何创建日历选项) 或者将信息转储到电子表格中,然后从中进行排序 或者以某种方式按时间循环,而不是按日历循环 我认为电子表格是最好的选择-还有其他想法吗 有没有一种简单的方法可以自动将iCal文件复制到电子表格中Calendar 如何合并2个google日历以按顺序显示事件?,calendar,google-apps-script,google-sites,Calendar,Google Apps Script,Google Sites,我正试图用一个我自己通过谷歌脚本创建的显示来替换我谷歌网站上笨重的谷歌日历议程视图 我可以在页面上获得事件详细信息,但我需要显示多个日历-如何确保项目在页面上的顺序正确,并且不按日历分组 我可以: 每次运行脚本时创建临时日历,合并多个日历(注意-我看不到任何创建日历选项) 或者将信息转储到电子表格中,然后从中进行排序 或者以某种方式按时间循环,而不是按日历循环 我认为电子表格是最好的选择-还有其他想法吗 有没有一种简单的方法可以自动将iCal文件复制到电子表格中 George如果PHP和Zend
George如果PHP和Zend Gdata库是一个选项,那么您可以获取日历列表提要,然后循环遍历每个日历的事件并将它们放入一个数组中。之后,您可以使用以下命令按开始时间对它们进行排序:
function cmp( $a, $b )
{
if( $a->when[0]->startTime == $b->when[0]->startTime ){ return 0 ; }
return ($a->when[0]->startTime < $b->when[0]->startTime) ? -1 : 1;
}
uasort($allEvents,'cmp');
函数cmp($a,$b)
{
如果($a->when[0]->startTime==$b->when[0]->startTime){return 0;}
返回($a->when[0]->startTime<$b->when[0]->startTime)?-1:1;
}
uasort($allEvents,'cmp');
我已经处理了很多这方面的问题。尤其是在发送多个日历上活动的客人名单电子邮件时。下面的函数将获取日历数组以及开始和结束时间,并将其转换为唯一的CalendarEvent
对象的单个数组
您可以运行一个版本的代码。您还会发现,它也在那里被评论
你似乎最感兴趣的是分类作品。它包含在byStart
函数中。有关数组排序的详细信息,请访问byStart
将适用于任何CalendarEvent
数组
由于管理日历的枯燥性,Javascript中可用的迭代函数使这项工作变得轻松。MDN有更多关于
这是:
function mergeCalendarEvents(calendars, startTime, endTime) {
var params = { start:startTime, end:endTime, uniqueIds:[] };
return calendars.map(toUniqueEvents_, params)
.reduce(toSingleArray_)
.sort(byStart_);
}
function toCalendars_(id) { return CalendarApp.getCalendarById(id); }
function toUniqueEvents_ (calendar) {
return calendar.getEvents(this.start, this.end)
.filter(onlyUniqueEvents_, this.uniqueIds);
}
function onlyUniqueEvents_(event) {
var eventId = event.getId();
var uniqueEvent = this.indexOf(eventId) < 0;
if(uniqueEvent) this.push(eventId);
return uniqueEvent;
}
function toSingleArray_(a, b) { return a.concat(b) }
function byStart_(a, b) {
return a.getStartTime().getTime() - b.getStartTime().getTime();
}
函数合并日历事件(日历、开始时间、结束时间){
var params={start:startTime,end:endTime,uniqueid:[]};
返回calendars.map(toUniqueEvents,params)
.reduce(到singlearray)
.排序(按开始顺序);
}
函数toCalendars_uid{return CalendarApp.getCalendarById(id);}
功能toUniqueEvents(日历){
return calendar.getEvents(this.start、this.end)
.filter(仅限iquieevents,this.uniqueid);
}
仅限功能IQueEvents(事件){
var eventId=event.getId();
var uniqueEvent=this.indexOf(eventId)<0;
if(uniqueEvent)这个.push(eventId);
返回事件;
}
函数toSingleArray(a,b){返回a.concat(b)}
函数byStart(a,b){
返回a.getStartTime().getTime()-b.getStartTime().getTime();
}