2011-05-03 1 views
0

모임 요청을 예약하기위한 양식이 있습니다. 이제 시간대를 추가해야합니다.

나는 시간대와 시간대에 대해 두 개의 드롭 다운을 가지고 있습니다. 그래서 (GMT-11 : 00) 미드웨이 아일랜드, 사모아, 시간대를 오후 4 시로 선택하면 그의 전망에 회의 요청을 한 사람에게 전달됩니다.

그의 전망은 IST로 설정되었지만 선택 시간대는 새로운 시간대이므로 적절히 조정해야합니다.

ical 형식의 모임 요청

$ical = 'BEGIN:VCALENDAR 
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN 
VERSION:2.0 
METHOD:REQUEST 
BEGIN:VEVENT 
ORGANIZER:MAILTO:'.$from_address.' 
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE; 
CN='.$to.':mailto:'.$to.' 
DTSTART:'.$dtstart.' 
DTEND:'.$dtend.' 
LOCATION:'.$meeting_location.' 
TRANSP:OPAQUE 
SEQUENCE:0 
UID:'.$cal_uid.' 
DTSTAMP:'.$todaystamp.' 
DESCRIPTION:'.$meeting_description.' 
SUMMARY:'.$subject.' 
PRIORITY:5 
CLASS:PUBLIC 
END:VEVENT 
END:VCALENDAR'; 

내가 .. 그것을 수색하고 내가 VTIMEZONE, TZID, TZOFFSETFROM을 추가 할 필요가 있다고, 지금은, TZOFFSETTO을 TZOFFSETFROM의 의미를 받고 있지 않다 TZOFFSETTO ...? 및 작업 VTIMEZONE 물건 정의 할 경우/시간대를 재정의입니다

답변

0

주, 그들은 구성의 VTIMEZONE 섹션에 일치하는 항목이 있어야합니다. @anmari가 말한 것과는 반대로, VTIMEZONE 구역 은 Outlook 이벤트 (승인/거부 버튼 표시)에서 캘린더 이벤트를 인식하는 데 필요하므로입니다.

내 경험상 가장 현명한 방법은 기존 VTIMEZONE 구성 (메일 원본에서 복사/붙여 넣기)을 수행하는 것입니다. 예를 들어 서유럽의 경우 다음과 같습니다.

BEGIN:VTIMEZONE 
TZID:W. Europe Standard Time 
BEGIN:STANDARD 
DTSTART:16010101T030000 
TZOFFSETFROM:+0200 
TZOFFSETTO:+0100 
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 
END:STANDARD 
BEGIN:DAYLIGHT 
DTSTART:16010101T020000 
TZOFFSETFROM:+0100 
TZOFFSETTO:+0200 
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 
END:DAYLIGHT 
END:VTIMEZONE 

변경하지 마십시오. 이메일 코드에 복사하여 붙여 넣기 만하면됩니다. 이제는 내부적으로 "Europe/Amsterdam"과 같은 PHP 시간대를 사용합니다. 이것을 기본 시간대로 사용하여 클래스를 사용하여 VEVENT의 값을이 값으로 변환합니다.

$Date = new DateTime($event_date); // this will be in the server's time zone 

// convert it to the 'internal' time zone 
$Date->setTimezone(new DateTimeZone('Europe/Amsterdam')); 

// ... 

echo "BEGIN:VEVENT\n"; 
echo "DTSTART;TZID=W. Europe Standard Time:" . $Date->format('Ymd\THis') . "\n" 

수신하는 캘린더/이메일 클라이언트는 이것을 보내면 자동으로 수신 시간 데이터를 수신자의 시간대로 변환합니다. 예! :)

2

, 일광 절약 변경 등 용도에

때 그 작업을 수행 할 필요가 없습니다를 실행하려면 다음을 사용하는 방법, DTSTART의 시간대에 시간대를 추가 할 수 있습니다. :

EG : DTSTART, TZID = 유럽/런던 : 20060707T130000

또는 전체 ICS 파일의 시간대를 원한다면, 당신이 일반적으로 받아 들여지는

X-WR-TIMEZONE을 발행 할 수있다 : 유럽/오슬로

도움이 될 그

일부 노트 (파일의 헤더에 일정 수준이 아닌 VEVENT시) :

당신이 (그들은 자유 형식이야) 선택 어떤 TZID 것을

http://icalevents.com/2064-ical-local-or-floating-date-times/

+0

"DTSTART; TZID = Europe/London : 20060707T130000"에 추가하면 현재 작동합니다. 나는 또한 DTEND에 tzid를 추가했습니다. 이제 메일은 회의 형식으로 전달되지 않습니다. – Jaimin