vuelo reenviar link ics google formato evento desde crear compartido como calendarios calendario archivos agregar php icalendar

php - reenviar - Crear archivo.ics dinĂ¡micamente



link calendario outlook (1)

Hice un sitio web para un cliente donde pueden publicar eventos. En lugar de crear manualmente archivos .ics de iCal para cada evento y subirlos, pensé que sería mejor sacarlo de la base de datos y crear automáticamente un archivo .ics con PHP.

Puedo extraer información de la base de datos (no hay problema), pero al convertirla en una marca de tiempo para el archivo de calendario es difícil. Esto es lo que almaceno en la base de datos:

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

Aquí está el código para crear mis archivos .ics:

//This is the most important coding. header("Content-Type: text/Calendar"); header("Content-Disposition: inline; filename=adamhouston_$id.ics"); echo "BEGIN:VCALENDAR/n"; echo "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN/n"; echo "VERSION:2.0/n"; echo "METHOD:PUBLISH/n"; echo "X-MS-OLK-FORCEINSPECTOROPEN:TRUE/n"; echo "BEGIN:VEVENT/n"; echo "CLASS:PUBLIC/n"; echo "CREATED:20091109T101015Z/n"; echo "DESCRIPTION:Speaker: $event_query_row[speaker_name]//n//nTopic: $event_query_row[speaker_topic]/n"; echo "DTEND:20100208T040000Z/n"; echo "DTSTAMP:20100109T093305Z/n"; echo "DTSTART:20100208T003000Z/n"; echo "LAST-MODIFIED:20091109T101015Z/n"; echo "LOCATION:$event_query_row[location]/n"; echo "PRIORITY:5/n"; echo "SEQUENCE:0/n"; echo "SUMMARY;LANGUAGE=en-us:ADAM-Houston Event/n"; echo "TRANSP:OPAQUE/n"; echo "UID:040000008200E00074C5B7101A82E008000000008062306C6261CA01000000000000000/n"; echo "X-MICROSOFT-CDO-BUSYSTATUS:BUSY/n"; echo "X-MICROSOFT-CDO-IMPORTANCE:1/n"; echo "X-MICROSOFT-DISALLOW-COUNTER:FALSE/n"; echo "X-MS-OLK-ALLOWEXTERNCHECK:TRUE/n"; echo "X-MS-OLK-AUTOFILLLOCATION:FALSE/n"; echo "X-MS-OLK-CONFTYPE:0/n"; //Here is to set the reminder for the event. echo "BEGIN:VALARM/n"; echo "TRIGGER:-PT1440M/n"; echo "ACTION:DISPLAY/n"; echo "DESCRIPTION:Reminder/n"; echo "END:VALARM/n"; echo "END:VEVENT/n"; echo "END:VCALENDAR/n";

Ahora, ¿cómo convierto los datos en mi base de datos a una marca de fecha / hora correcta?


iCal horas almacenadas en UTC y no en la zona horaria en la que se originaron a menos que se especifique lo contrario (ver edición)

Si desea que su código sea genérico, también deberá almacenar la zona horaria. Si realmente quieres ... puedes codificar en la conversión.

También recomendaría no almacenar el tiempo en este formato:

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

y pasar a un formato de marca de tiempo. Pasarás de 4 (?) Columnas a una. ¿Por qué es esto bueno? ¡Porque puede usar PHP date() para formatear la fecha en exactamente lo que necesita! (necesitarás usar strtotime () creo y también alguien tiene una función de conversión de zona horaria en los comentarios)

Mirando lo que se debe hacer desde la perspectiva de iCal:

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

EDITAR:
La Z representa el tiempo UTC o el tiempo absoluto.
Puede establecer la zona horaria en el archivo y dejar la conversión al programa de calendario.
http://tools.ietf.org/html/rfc5545#section-3.2.19