Como Criar um Arquivo iCalendar (.ics) Simples e Funcional

O arquivo .ics é um padrão aberto amplamente usado para o intercâmbio de eventos de calendário entre diferentes plataformas como Google Calendar, Outlook, Apple Calendar, entre outros. Ele é um arquivo de texto estruturado, simples e leve, que permite criar e distribuir convites de eventos de forma automática e eficiente.

Estrutura Mínima de um Arquivo .ics

Um arquivo iCalendar básico, contendo um único evento, segue a seguinte estrutura:

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20250709T201135Z
DTSTART:20250715T110000Z
DTEND:20250715T120000Z
SUMMARY:Reunião LGPD
LOCATION:Sala BOB
DESCRIPTION:Reunião para discutir pontos da LGPD
END:VEVENT
END:VCALENDAR

Explicação dos Campos Essenciais

  • BEGIN:VCALENDAR / END:VCALENDAR: Delimitam o início e o fim do calendário.
  • VERSION:2.0: Especifica a versão do padrão iCalendar.
  • CALSCALE:GREGORIAN: Define o calendário utilizado (gregoriano).
  • BEGIN:VEVENT / END:VEVENT: Delimitam o início e o fim do evento.
  • UID: Identificador único do evento, evita duplicidade.
  • DTSTAMP: Data e hora da criação/modificação do arquivo, em UTC.
  • DTSTART / DTEND: Data e hora de início e fim do evento, em UTC (indicado pelo sufixo Z).
  • SUMMARY: Título do evento.
  • LOCATION: Local do evento.
  • DESCRIPTION: Descrição detalhada do evento.

Recomendações Práticas

  • Utilize o horário em UTC para evitar problemas de fuso horário.
  • Gere o UID de forma única, combinando, por exemplo, timestamp com domínio.
  • Envie o arquivo .ics com o cabeçalho MIME correto para que clientes de e-mail reconheçam como convite de calendário.

Exemplo Rápido em PHP para Gerar um Arquivo .ics

<?php
$uid = uniqid() . '@devdata.com.br';
$dtstamp = gmdate('Ymd\THis\Z');
$dtstart = gmdate('Ymd\THis\Z', strtotime('2025-07-15 11:00:00'));
$dtend = gmdate('Ymd\THis\Z', strtotime('2025-07-15 12:00:00'));
$summary = "Reunião LGPD";
$location = "Sala BOB";
$description = "Reunião para discutir pontos da LGPD";

$ical = "BEGIN:VCALENDAR\r\n";
$ical .= "VERSION:2.0\r\n";
$ical .= "CALSCALE:GREGORIAN\r\n";
$ical .= "BEGIN:VEVENT\r\n";
$ical .= "UID:$uid\r\n";
$ical .= "DTSTAMP:$dtstamp\r\n";
$ical .= "DTSTART:$dtstart\r\n";
$ical .= "DTEND:$dtend\r\n";
$ical .= "SUMMARY:$summary\r\n";
$ical .= "LOCATION:$location\r\n";
$ical .= "DESCRIPTION:$description\r\n";
$ical .= "END:VEVENT\r\n";
$ical .= "END:VCALENDAR\r\n";

header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=evento.ics');
echo $ical;
?>

Acessando esse script em um servidor PHP você gera e baixa um arquivo .ics pronto para ser usado como convite de evento.

Rolar para cima