2009-11-23 6 views
6

Ich bin auf der Suche nach einer PHP-Klasse, die eine ICalendar (ICS) -Datei analysieren und Zeitzonen korrekt behandeln kann.ICalendar Parser in PHP, der Zeitzonen unterstützt

Ich habe bereits einen ICS-Parser selbst erstellt, aber er kann nur mit PHP bekannten Zeitzonen umgehen (wie 'Europe/Paris').

Leider verwendet ICS-Datei, die von Evolution (Standard-Kalender-Software von Ubuntu) generiert wird, keine standardmäßigen Zeitzonen-IDs. Es exportiert Ereignisse mit einer spezifischen Zeitzonen-ID, die auch die vollständige Definition der Zeitzone exportiert: Sommerzeitdaten, Wiederholungsregel und all die schwierigen Dinge, die man über Zeitzonen versteht.

Das ist zu viel für mich. Da es nur ein kleines Dienstprogramm für meine Freundin war, werde ich keine Zeit haben, die ICalendar-Spezifikation weiter zu untersuchen und selbst einen vollständigen ICalendar-Parser zu erstellen.

Gibt es eine bekannte Implementierung des ICalendar-Dateiformats in PHP, die Zeitzonendefinitionen parsen kann?

+2

Ich verwende 'Saber \ vObject' jetzt. – mirabilos

+0

[ICS Parser] (https://github.com/u01jmg3/ics-parser) – u01jmg3

Antwort

10

Höchstwahrscheinlich gibt es eine Menge Bibliotheken, die .ics-Dateien analysieren, aber ich werde Ihnen ein Beispiel zeigen, das ziemlich gut für mich funktioniert.

Ich habe diese Bibliothek verwendet: http://www.phpclasses.org/browse/file/16660.html

Es gibt Ihnen viel Flexibilität, verschiedene Arten von ICal Komponenten in der Handhabung: VEVENT, VTODO, VJOURNAL, VFREEBUSY, VALARM und VTIMEZONE (die Sie zu fragen wurden).

Beispiel:

<pre><?php 

// 
// Open library 
// 
require_once("iCalcreator.class.php") ; 

// 
// Demo ICal file contents 
// 
$string = <<<EOS 
BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//hacksw/handcal//NONSGML v1.0//EN 
BEGIN:VTIMEZONE 
TZID:US-Eastern 
LAST-MODIFIED:19870101T000000Z 
BEGIN:STANDARD 
DTSTART:19971026T020000 
RDATE:19971026T020000 
TZOFFSETFROM:-0400 
TZOFFSETTO:-0500 
TZNAME:EST 
END:STANDARD 
BEGIN:DAYLIGHT 
DTSTART:19971026T020000 
RDATE:19970406T020000 
TZOFFSETFROM:-0500 
TZOFFSETTO:-0400 
TZNAME:EDT 
END:DAYLIGHT 
END:VTIMEZONE 
END:VCALENDAR 
EOS 
; 

// 
// There is no direct string parsing functionality, 
// so first create a temporary file 
// 
$filename = tempnam(".", "") ; 
$f = fopen($filename,"w") ; 
fwrite($f, $string); 
fclose($f); 

// 
// ... parse it into an object 
// 
$var = new vcalendar(); 
$var->parse($filename); 
var_dump($var); 
$event = $var->components[0] ; 
var_dump($event->createDtstamp()); 


// 
// ... and finally remove all temporary data. 
// 
unlink($filename); 
+0

Danke, ich werde in das schauen :) –

+0

sieht gerade aus, was ich auch danach bin, cheers – wired00

+0

phpclasses.org erfordert, dass Sie sich registrieren in der Lage sein, auf den Download zuzugreifen. Ich habe einen [öffentlich zugänglichen Spiegel] gemacht (https://github.com/mirabilos/iCalCreator), der meine Rechte unter der Lizenz dieses ... wahnsinnigen Spaghetti-Codes ausübt. – mirabilos