Supposons :

  1. une base de données : anniv
  2. qui contient une table : anniversaire
  3. qui contient les champs suivants : id (identifiant clé unique), nom, prenom, email, naissance (sous la forme aaaa-mm-jj)
Je souhaiterais créer le fichier anniversaire.ics pour l'année courante (cas simple, pas de récurrence).
La forme générale du fichier anniversaire.ics sera :

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:20080123
DTEND:20080123
SUMMARY:Anniversaire de Pierre Lajoie
LOCATION:Ma société
DESCRIPTION:pierre.lajoie@masociete.com
END:VEVENT
BEGIN:VEVENT
DTSTART:20080601
DTEND:20080601
SUMMARY:Anniversaire de Michel Triste
LOCATION:Ma société
DESCRIPTION:michel.triste@masociete.com
END:VEVENT
END:VCALENDAR

Pierre Lajoie est né le 23 janvier, Michel Triste le 1er juin.
Ce qui donnerait, par exemple, en PHP :

    $query = "SELECT * FROM anniversaire ORDER BY nom";
    $result = mysql_query($query);
    $number = mysql_numrows($result);
    $monics = "BEGIN:VCALENDAR".chr(10);
    $monics = $monics."VERSION:2.0".chr(10);
    $monics = $monics."PRODID:-//hacksw/handcal//NONSGML v1.0//EN".chr(10);
    if ($number==0) {
    } else {
        // créer le fichier ICS
        for($count = 1; $row=mysql_fetch_row($result); ++$count)
        {
            $monics = $monics."BEGIN:VEVENT".chr(10);
            // date au bon format
            $moisjour = substr($row[4], 5, 2).substr($row[4], 8, 2);
            $anneecourante = date(Y);
            $monics = $monics."DTSTART:".$anneecourante.$moisjour.chr(10);
            $monics = $monics."DTEND:".$anneecourante.$moisjour.chr(10);
            $monics = $monics."SUMMARY:Anniversaire de ".$row[2]." ".$row[1].chr(10);
            $monics = $monics."LOCATION:Parlement bruxellois".chr(10);
            $monics = $monics."DESCRIPTION:".$row[3].chr(10);
            $monics = $monics."END:VEVENT".chr(10);
        }
        $monics = $monics."END:VCALENDAR".chr(10);
        // écrire dans fichier
        $ficin="./anniversaire/anniversaire.ics";
        $monfic = fopen($ficin, "w");
        fwrite($monfic, $monics);
        fclose($monfic);
        echo "Télécharger au format <a href=\"/intranet/anniversaire/anniversaire.ics\">iCalendar</a>";

}

Voilà pour l'exemple, en tenant compte du traitement spécifique de la date.