Créer.fichier ics dynamiquement

j'ai fait un site pour un client où ils peuvent afficher des événements. Au lieu de créer manuellement .les fichiers ics d'iCal pour chaque événement et en le téléchargeant, je pense qu'il serait préférable de le retirer de la base de données et de créer automatiquement un .fichier ics automatiquement avec PHP.

je peux extraire des informations de la base de données (pas de problème), mais lors de la conversion en horodatage pour le fichier de calendrier il est difficile. Voici ce que je stocke dans la base de données:

Month: 05
Day: 02
Year: 2011
Time: 11:30am - 1:30pm

Voici le code pour créer mon .fichiers ics:

//This is the most important coding.
header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=adamhouston_$id.ics");

echo "BEGIN:VCALENDARn";
echo "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//ENn";
echo "VERSION:2.0n";
echo "METHOD:PUBLISHn";
echo "X-MS-OLK-FORCEINSPECTOROPEN:TRUEn";
echo "BEGIN:VEVENTn";
echo "CLASS:PUBLICn";
echo "CREATED:20091109T101015Zn";

echo "DESCRIPTION:Speaker: $event_query_row[speaker_name]nnTopic: $event_query_row[speaker_topic]n";
echo "DTEND:20100208T040000Zn";
echo "DTSTAMP:20100109T093305Zn";
echo "DTSTART:20100208T003000Zn";
echo "LAST-MODIFIED:20091109T101015Zn";
echo "LOCATION:$event_query_row[location]n";
echo "PRIORITY:5n";
echo "SEQUENCE:0n";
echo "SUMMARY;LANGUAGE=en-us:ADAM-Houston Eventn";
echo "TRANSP:OPAQUEn";
echo "UID:040000008200E00074C5B7101A82E008000000008062306C6261CA01000000000000000n";
echo "X-MICROSOFT-CDO-BUSYSTATUS:BUSYn";
echo "X-MICROSOFT-CDO-IMPORTANCE:1n";
echo "X-MICROSOFT-DISALLOW-COUNTER:FALSEn";
echo "X-MS-OLK-ALLOWEXTERNCHECK:TRUEn";
echo "X-MS-OLK-AUTOFILLLOCATION:FALSEn";
echo "X-MS-OLK-CONFTYPE:0n";
//Here is to set the reminder for the event.
echo "BEGIN:VALARMn";
echo "TRIGGER:-PT1440Mn";
echo "ACTION:DISPLAYn";
echo "DESCRIPTION:Remindern";
echo "END:VALARMn";
echo "END:VEVENTn";
echo "END:VCALENDARn";

maintenant, comment convertir les données de ma base de données en un tampon de date/heure correct?

24
demandé sur afuzzyllama 2011-04-22 02:00:51

1 réponses

iCal fois stockés au format UTC et pas dans la zone de temps qu'ils sont originaires, à moins d'indication contraire (voir edit)

si vous voulez que votre code soit Générique, vous aurez besoin de stocker le fuseau horaire aussi. Si vous le voulez vraiment... vous pouvez le code dur dans la conversion.

je vous recommande également de ne pas stocker de temps dans ce format:

 Month: 05
 Day: 02 
 Year: 2011
 Time: 11:30am - 1:30pm

et passer à un format d'horodatage. Vous passerez de 4(? les colonnes vers le bas à un. Pourquoi est-ce bon? Parce que vous pouvez utiliser PHP date () pour formater la date pour vous en exactement ce dont vous avez besoin! (vous aurez besoin d'utiliser la fonction strtotime() je crois et aussi quelqu'un a un fuseau horaire de conversion la fonction dans les commentaires)

en Regardant ce qui doit être fait à partir d'un fichier iCal point de vue:

 echo "DTSTAMP:<year><month><day>T<hour><minutes><seconds>Z\n";  // Time iCal item was made
 echo "DTSTART:<year><month><day>T<hour><minutes><seconds>Z\n";  // Start time
 echo "DTEND:<year><month><day>T<hour><minutes><seconds>Z\n";    // End time

EDIT:

Le Z représente le temps UTC, ou le temps absolu.

Vous pouvez définir le fuseau horaire dans le fichier et laisser la conversion au calendrier program.

http://tools.ietf.org/html/rfc5545#section-3.2.19

18
répondu afuzzyllama 2018-03-26 04:16:36