0

我正在尝试从使用 php 解析的组件服务器(ics 文件)中获取我的日历。到目前为止一切顺利,除了可以为每个事件条目定义额外的时区:

DTSTART;TZID="Amsterdam, Belgrade, Berlin, Brussels, Budapest, Madrid, Paris, Prague, Stockholm":20110723T193000
DTEND;TZID="Amsterdam, Belgrade, Berlin, Brussels, Budapest, Madrid, Paris, Prague, Stockholm":20110724T000000

另一个事件是

DTSTART;TZID="Greenland (Danmarkshavn)":20120523T193000
DTEND;TZID="Greenland (Danmarkshavn)":20120524T000000

问题是在网上找到的常见解析器类只是去掉那些 TZID 参数,这会导致将事件移动到字符串末尾的时间戳。

是否有任何用于 php 的解析器来处理该问题?

4

2 回答 2

0

更新的答案:

sabre/vobject有一个相当广泛的时区映射列表,可以映射到它们的 olson 对应对象。完整列表在这里

但它看起来不像您找到的特定字符串。

符合标准的 iCalendar 对象实际上还应该包含一个VTIMEZONE位于 VEVENT 对象之上的对象。对象中的信息VTIMEZONE有助于解析器(例如 vobject)找出预期的时区。

如果您VTIMEZONE在源代码中看不到任何地方,则意味着您使用的组件服务器正在生成损坏的 iCalendar 文件。我建议提交一个建议这个的错误。有许多应用程序生成不包含 的 iCalendar ,但这些应用程序倾向于使用受到广泛支持VTIMEZONE的 Olson 标识符(例如)。Europe/Amsterdam

于 2014-07-03T20:44:58.473 回答
-1

你应该看看: http ://www.phpclasses.org/browse/file/16660.html

根据这个线程它处理 TZID: ICalendar parser in PHP that support timezones

于 2014-08-01T20:24:40.933 回答