Я пытаюсь динамически генерировать файл ics в PHP, где часовой пояс является динамическим в соответствии с заданным местоположением. Все работает хорошо, но есть проблема с дневным освещением, то есть показывается разница во времени в течение одного часа. Теперь, чтобы решить эту проблему, я должен динамически использовать DAYLIGHT
. но я не знаю, как использовать его динамически или где я могу получить TZOFFSETFROM
и TZOFFSETTO
смещения, связанные с заданным часовым поясом.Проблема динамического часового пояса ICS
Для примера:
$timeZone = "America/Denver" // dynamically fetched from DB
$ical = "BEGIN:VCALENDAR\n";
$ical .= "VERSION:2.0\n";
$ical .= "PRODID:-//LokalMotion//LokalMotion Events v1.0//EN\n";
$ical .= "CALSCALE:GREGORIAN\n";
$ical .= "METHOD:PUBLISH\n";
$ical .= "X-WR-CALNAME:LokalMotion Events\n";
$ical .= "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n";
$ical .= "BEGIN:VTIMEZONE\n";
$ical .= "TZID:{$timeZone}\n";
$ical .= "TZURL:http://tzurl.org/zoneinfo-outlook/{$timeZone}\n";
$ical .= "X-LIC-LOCATION:{$timeZone}\n";
$ical .= "END:VTIMEZONE\n";
$ical .= "BEGIN:VEVENT\n";
$ical .= "DTSTAMP:".date('Ymd\THis\Z')."\n";
$ical .= "DTSTART;TZID={$timeZone}:{$start_date}\n";
$ical .= "DTEND;TZID={$timeZone}:{$end_date}\n";
$ical .= "STATUS:CONFIRMED\n";
$ical .= "SUMMARY:{$title}\n";
$ical .= "DESCRIPTION:{$description}\n";
$ical .= "ORGANIZER;CN=Reminder:MAILTO:[email protected]\n";
$ical .= "CLASS:PUBLIC\n";
$ical .= "CREATED:{$start_date}Z\n";
$ical .= "LOCATION:{$location}\n";
$ical .= "URL:http://www.mysite.com\n";
$ical .= "SEQUENCE:1\n";
$ical .= "LAST-MODIFIED:".date('Ymd\THis\Z')."\n";
$ical .= "UID:{$title}[email protected]\n";
$ical .= "END:VEVENT\n";
$ical .= "END:VCALENDAR";
echo $ical;
Теперь, как использовать дневной свет динамически в зависимости от местоположения, как местоположение может быть 'Америка/Caracas' .. и т.д.
$ical .= "BEGIN:DAYLIGHT";
$ical .= "TZOFFSETFROM:{}"; //I need this dynamic
$ical .= "TZOFFSETTO:{}";//I need this dynamic
$ical .= "TZNAME:EDT";
$ical .= "DTSTART;TZID={$timeZone}:{$start_date}\n";
$ical .= "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU";
$ical .= "END:DAYLIGHT";
Спасибо заранее.
Вы можете быть в состоянии использовать информацию из 'DateTimeZone :: getTransitions' заполнить значения правильно. См. [Эти документы] (http://www.php.net/manual/en/datetimezone.gettransitions.php). –
Спасибо Мэтту за вашу поддержку. – Bheem
Не используйте «Z» в конце вашей даты и времени, потому что в этом случае Outlook и iCal будут использовать это время в формате UTC и пересчитывать его в соответствии с вашим местным часовым поясом. – Anonymous