Проблема изменения времени в событии ics, сгенерированном из php - PullRequest
0 голосов
/ 21 апреля 2020

привет, я генерирую даже из php, используя ics vacalendar, но когда событие генерируется в гамиле, это меняет время для исправления времени, я добавил +0500, так как я нахожусь в Пакистане, тогда он показывает правильное время, что я хочу, я не хочу чтобы использовать любой часовой пояс, я хочу создать событие в Gmail в то время, которое я публикую в DTSTART и DTEND без зоны времени

вот мой код

 $ical = 'BEGIN:VCALENDAR' . "\r\n" .
        'PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN' . "\r\n" .
        'VERSION:2.0' . "\r\n" .
        'METHOD:REQUEST' . "\r\n" .
        'BEGIN:VTIMEZONE' . "\r\n" .
        'TZID:Eastern Time' . "\r\n" .
        'BEGIN:STANDARD' . "\r\n" .
        'DTSTART:20091101T020000' . "\r\n" .
        'RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11' . "\r\n" .
        'TZOFFSETFROM:+0500' . "\r\n" .
        'TZOFFSETTO:+0500' . "\r\n" .
        'TZNAME:UTC' . "\r\n" .
        'END:STANDARD' . "\r\n" .
        'BEGIN:DAYLIGHT' . "\r\n" .
        'DTSTART:20090301T020000' . "\r\n" .
        'RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3' . "\r\n" .
        'TZOFFSETFROM:+0500' . "\r\n" .
        'TZOFFSETTO:+0500' . "\r\n" .
        'TZNAME:TZID' . "\r\n" .
        'END:DAYLIGHT' . "\r\n" .
        'END:VTIMEZONE' . "\r\n" .
        'BEGIN:VEVENT' . "\r\n" .
        'ORGANIZER;CN="'.$from_name.'":MAILTO:'.$from_address. "\r\n" .
        'LAST-MODIFIED:' . date("Ymd\TGis") . "\r\n" .
        'UID:'.date("Ymd\TGis", strtotime($startTime)).rand()."@".$domain."\r\n" .
        'DTSTAMP:'.date("Ymd\TGis"). "\r\n" .
        'DTSTART;TZID=UTC:'.date("Ymd\THis", strtotime($startTime)). "\r\n" .
        'DTEND;TZID=UTC:'.date("Ymd\THis", strtotime($endTime)). "\r\n" .
        'TRANSP:OPAQUE'. "\r\n" .
        'SEQUENCE:1'. "\r\n" .
        'SUMMARY:' . $subject . "\r\n" .
        'LOCATION:' . $location . "\r\n" .
        'CLASS:PUBLIC'. "\r\n" .
        'PRIORITY:5'. "\r\n" .
        'BEGIN:VALARM' . "\r\n" .
        'TRIGGER:-PT15M' . "\r\n" .
        'ACTION:DISPLAY' . "\r\n" .
        'DESCRIPTION:Reminder' . "\r\n" .
        'END:VALARM' . "\r\n" .
        'END:VEVENT'. "\r\n" .
        'END:VCALENDAR'. "\r\n";

1 Ответ

0 голосов
/ 22 апреля 2020

Если вы не хотите размещать часовой пояс, вы должны знать, что это имеет смысл только для некоторых «событий», например: напоминание о приеме таблеток в 10 часов утра, в каком бы часовом поясе вы ни находились. Это единственная дата и время в ics спецификация, для которой нет часового пояса. Это называется «Местное время». В противном случае вам нужно либо указать время в часовом поясе UT C ИЛИ в «вашем» часовом поясе с TZID для вашего часового пояса.

В спецификации сказано, что можно публиковать даты тремя различными способами:

ФОРМА № 1: ДАТА С МЕСТНЫМ ВРЕМЕНЕМ: например, 19980118T230000 будет 23 часа в любом часовом поясе, например, будильник с утренним пробуждением

ФОРМА № 2: ДАТА С UT C ВРЕМЯ (Z сзади ) например: 19980119T070000Z

ФОРМА № 3: ДАТА С ЛОКАЛЬНЫМ ВРЕМЕНЕМ И СПРАВОЧНИКОМ ВРЕМЕНИ ЗОНА, например: TZID = America / New_York: 19980119T020000

В формах 2 и 3 принимающее приложение будет корректировать время от UT C или часового пояса, указанного часовому поясу зрителя. Форма 1 всегда будет отображаться в это время для каждой зоны, поэтому будет отличаться фактическое время по всему миру.

Подробнее см. В спецификации RFC5545 https://tools.ietf.org/html/rfc5545#section -3.3.5

...