Autor Zpráva
M@rtin
Profil *
Následující kód umožňuje stažení a uložení souboru ICS s událostí do kalendáře MS Outlook. Nevím, kde mám chybu, ale od data a času začátku (i konce) musím odečítat 2 hodiny abych měl správné údaje, obávám se že v zimním čase budu odečítat zase jen 1 hodinu. Nevíte prosím jak zajistit, abych nepřičítal a neodečítal nic, abych mohl použít přesná data tak jak jsou v DB bez korekce?

header("Content-Type: text/Calendar; charset=utf-8"); 
header("Content-Disposition: inline; filename=udalost-do-outlook.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 "X-WR-TIMEZONE:Europe/Budapest\n";
echo "BEGIN:VEVENT\n";
echo "CLASS:PUBLIC\n";
echo "TZID:Europe/Budapest\n";
echo "CREATED:".date('Ymd')."T".date('His')."Z\n";
echo "DESCRIPTION:".iconv('ISO8859-2','UTF-8',$radek1[popis])."\n";
echo "DTEND;TZID=Europe/Prague:".Date('Ymd',$radek1[termindo])."T".Date('Hi',$radek1[termindo]-7200)."00Z\n";
echo "DTSTAMP:".Date('Ymd',Time())."T".Date('Hi',Time())."00Z\n";
echo "DTSTART;TZID=Europe/Prague:".Date('Ymd',$radek1[terminod])."T".Date('Hi',$radek1[terminod]-7200)."00Z\n";
echo "LAST-MODIFIED:".Date('Ymd',Time())."T".Date('Hi',Time())."00Z\n";
echo "LOCATION:".iconv('ISO8859-2','UTF-8',$radek1[misto])."\n";
echo "PRIORITY:2\n";
echo "SEQUENCE:0\n";
echo "SUMMARY;LANGUAGE=cs:".iconv('ISO8859-2','UTF-8',$radek1[nazev])." od: ".Date('H:i',$radek1[terminod])." - ".Date('H:i',$radek1[termindo])."\n";
echo "TRANSP:OPAQUE\n";
echo "ORGANIZER;CN=\"organizator\":MAILTO:webmaster@mojedomena.cz\n"; 
?>
UID:<?php echo Time()."\n";?>
CATEGORIES:Důležité
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:2
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT1440M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
Alphard
Profil
Tak 2 hodiny je v létě náš posun oproti pásmu bez posunu (UTC, Londýn).
Kdybyste používal Datetime třídu a správně nastavená časová pásma, mělo by to fugnovat bez problémů.
M@rtin
Profil *
To znamená, že se má nahradit funkce Date?

echo "DTEND;TZID=Europe/Prague:".Date('Ymd',$radek1[termindo])."T".Date('Hi',$radek1[termindo]-7200)."00Z\n";
Alphard
Profil
To není jediný způsob. Jen jsem tipl příčinu.
Taky můžete do současného systémum jen dodat dynamicky odečítanou hodnotu, viz O a P parametry u date.
Barka
Profil *
Můžete prosím uvést příklad jak se ten paramter O nebo P ve funkci Date používá?
M@rtin
Profil *
Tak jsem to spáchal takto:
header("Content-Type: text/Calendar; charset=utf-8"); 
header("Content-Disposition: inline; filename=udalost-do-ms-outlook.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:".date('Ymd')."T".date('His')."Z\n";
echo "DESCRIPTION:".iconv('ISO8859-2','UTF-8',$radek1[popis])."\n";
echo "DTEND:".Date('Ymd\THi\0\0\Z',$radek1[termindo] - (substr(Date('O'),2,1)*3600))."\n";
echo "DTSTAMP:".Date('Ymd\THi\0\0\Z',Time())."\n";
echo "DTSTART:".Date('Ymd\THi\0\0\Z',$radek1[terminod] - (substr(Date('O'),2,1)*3600))."\n";
echo "LAST-MODIFIED:".Date('Ymd',Time())."T".Date('Hi',Time())."00Z\n";
echo "LOCATION:".iconv('ISO8859-2','UTF-8',$radek1[misto])."\n";
echo "PRIORITY:2\n";
echo "SEQUENCE:0\n";
echo "SUMMARY;LANGUAGE=cs:".iconv('ISO8859-2','UTF-8',$radek1[nazev])." od: ".Date('H:i',$radek1[terminod])." - ".Date('H:i',$radek1[termindo])."\n";
echo "TRANSP:OPAQUE\n";
echo "ORGANIZER;CN=\"organizator\":MAILTO:webmaster@mojedomena.cz\n"; 
?>
UID:<?php echo Time()."\n";?>
CATEGORIES:Důležité
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:2
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT1440M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: