首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SabreDAV客户端创建日历对象

SabreDAV客户端创建日历对象
EN

Stack Overflow用户
提问于 2018-09-22 09:29:14
回答 1查看 589关注 0票数 0

我试图在我的SabreDAV服务器中添加一个日历弹出。从现有客户端(如OSX上的iOS或iCalendar )来看,这是很好的工作方式。但是,当尝试添加一个新的日历对象时,我会得到以下错误:

Sabre\CalDAV\Exception\InvalidComponentType iCalendar对象至少必须有一个类型的组件

vcal->序列化具有以下输出:

代码语言:javascript
复制
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Sabre//Sabre VObject 4.1.2//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:sabre-vobject-62abb501-ad16-459b-8891-31e33cf5e9f2
DTSTAMP:20180922T111429Z
SUMMARY:hey
DTSTART;TZID=Europe/Amsterdam:20180922T095000
DTEND;TZID=Europe/Amsterdam:32000922T153800
ATTENDEE:mailto:calendar@domain.com
END:VEVENT
END:VCALENDAR

我用于添加请求的代码:

代码语言:javascript
复制
$datetime = date('Y-m-d H:i:s');
$begin = new \DateTime(date('Y-m-d H:i:s', strtotime($datetime ."-30 minutes")), new \DateTimeZone('Europe/Amsterdam'));
$end = new \DateTime(strtotime(date('Y-m-d H:i:s', strtotime($datetime))), new \DateTimeZone('Europe/Amsterdam'));

require('vendor/sabre/autoload.php');
$vcal = new \Sabre\VObject\Component\VCalendar();
$vevent = $vcal->add('VEVENT');

$vevent->add('SUMMARY', 'hey');
$vevent->add('DTSTART', $begin);
$vevent->add('DTEND', $end);

$vevent->add('ATTENDEE', 'mailto:calendar@domain.com');

$this->davClient->request('PUT', 'calendars/admin/Rekenen/'.uniqid().'.ics', $vcal->serialize());
EN

回答 1

Stack Overflow用户

发布于 2018-09-24 06:57:09

不知道这是否是问题的根本原因,但是DTSTART和DTEND使用TZID“Europe/阿姆斯特丹”引用时区,而iCalendar流不包含相应的VTIMEZONE组件,该组件将给出此时区的定义。

代码语言:javascript
复制
BEGIN:VCALENDAR
...
BEGIN:VTIMEZONE
...
END:VTIMEZONE
BEGIN:VEVENT
...
END:VEVENT
END:VCALENDAR

有些服务器在没有定义的情况下接受这种引用,而另一些服务器则不接受。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52455326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档