Я видел несколько похожих вопросов, но, насколько я могу судить, я делаю это правильно.
Я пытаюсь использовать скрипт PHP для создания напоминания календаря, которое учитывает летнее время Великобритании. В настоящее время мы находимся в летнее время, и сгенерированное напоминание календаря показывает час вперед Какое бы значение я ни вкладывал в TZOFFSET, похоже, в любом случае не корректировать время.
Любая помощь будет высоко ценится:
echo 'BEGIN:VCALENDAR'."\r\n";
echo 'VERSION:2.0'."\r\n";
echo 'PRODID:-//bookingtest.co.uk'."\r\n";
echo 'METHOD:REQUEST\n';
echo 'CALSCALE:GREGORIAN'."\r\n";
echo 'BEGIN:VTIMEZONE'."\r\n";
echo 'TZID:Europe/London'."\r\n";
echo 'TZURL:http://tzurl.org/zoneinfo-outlook/Europe/London'."\r\n";
echo 'X-LIC-LOCATION:Europe/London'."\r\n";
echo 'BEGIN:DAYLIGHT'."\r\n";
echo 'TZOFFSETFROM:+0100'."\r\n";
echo 'TZOFFSETTO:+0200'."\r\n";
echo 'TZNAME:BST'."\r\n";
echo 'DTSTART:19700329T010000'."\r\n";
echo 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU'."\r\n";
echo 'END:DAYLIGHT'."\r\n";
echo 'BEGIN:STANDARD'."\r\n";
echo 'TZOFFSETFROM:+0100'."\r\n";
echo 'TZOFFSETTO:+0000'."\r\n";
echo 'TZNAME:GMT'."\r\n";
echo 'DTSTART:19701025T020000'."\r\n";
echo 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU'."\r\n";
echo 'END:STANDARD'."\r\n";
echo 'END:VTIMEZONE'."\r\n";
echo 'BEGIN:VEVENT'."\r\n";
echo 'DTEND:'; echo dateToCal($dateend).'Z'."\r\n";
echo 'UID:'; echo uniqid()."\r\n";
echo 'DTSTAMP:'; echo dateToCal(time()).'Z'."\r\n";
echo 'LOCATION:'; echo escapeString($address)."\r\n";
echo 'DESCRIPTION:'; echo escapeString($description)."\r\n";
echo 'URL;VALUE=URI:'; echo escapeString($uri)."\r\n";
echo 'SUMMARY:'; echo escapeString($summary)."\r\n";
echo 'DTSTART:'; echo dateToCal($datestart).'Z'."\r\n";
echo 'BEGIN:VALARM'."\r\n";
echo 'TRIGGER:-PT2H'."\r\n";
echo 'ACTION:DISPLAY'."\r\n";
echo 'DESCRIPTION:'; echo escapeString($summary)."\r\n";
echo 'END:VALARM'."\r\n";
echo 'END:VEVENT'."\r\n";
echo 'END:VCALENDAR'."\r\n";
Ты делаешь:
echo 'BEGIN:DAYLIGHT'."\r\n";
echo 'TZOFFSETFROM:+0100'."\r\n";
echo 'TZOFFSETTO:+0200'."\r\n";
echo 'TZNAME:BST'."\r\n";
когда это должно быть ОТ +0000 до +0100.
Тогда не видите полное событие, поэтому мы должны предположить, что вы правильно ссылаетесь на TZID в вашем DTSTART / DTEND
Понял.
После небольшого возни я решил это. Мне просто нужно было убрать «Z» с конца DTSTART AND DTEND в VEVENT, чтобы остановить его, заставляя его переходить в GMT, а не в летнее время.