我正试图从使用php解析的groupware服务器(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照顾这个问题?
更新答案:
sabre/vobject有这样一个相当广泛的时区映射列表,以映射到它们的olson对应。完整列表在这里。
但是它看起来不像你找到的特定字符串。
符合标准的iCalendar对象实际上也应该包含一个VTIMEZONE
对象,在VEVENT对象之上。VTIMEZONE
对象中的信息可以帮助解析器(如vobject)找出预期的时区。
如果你在源代码中没有看到VTIMEZONE
,这意味着你正在使用的群件服务器正在生成破碎的iCalendar文件。我建议提交一个bug。有许多生成iCalendar的应用程序不包含VTIMEZONE
,但是这些应用程序倾向于使用广泛支持的Olson标识符(例如Europe/Amsterdam
)。
你应该看看:http://www.phpclasses.org/browse/file/16660.html
根据这个线程,它处理PHP中支持时区的TZID: ICalendar解析器