会议请求的格式

时间:2011-05-03 12:36:34

标签: php icalendar

我正在安排一个用于安排会议请求的表单。现在我需要为它添加时区。

我有两个下拉菜单,一个用于时区,一个用于时间。因此,如果我选择时区为(格林威治标准时间-11:00)中途岛,萨摩亚和时间为下午4:00,而不是邮件发送给一个人,他的前景中有会议请求。

现在他的前景配置了IST,但由于时区被选中是新的时区所以应该适当调整。

$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 ......的含义?以及如何使用它们来执行任务

2 个答案:

答案 0 :(得分:2)

VTIMEZONE的内容是,如果你想定义/重新定义时区,夏令时变化等等。

出于您的目的,您不需要这样做,您只需将时区添加到DTSTART的时间值即可。 :

EG:DTSTART; TZID =欧洲/伦敦:20060707T130000

或者如果您想要整个ics文件的时区,您可以发布一个普遍接受的

X-WR-TIMEZONE:欧洲/奥斯陆

(在文件标题中的日历级别,而不是在VEVENT中)

可能会有所帮助的一些注意事项:

http://icalevents.com/2613-what-every-developer-ought-to-know-about-timezones-wrt-calendar-files/

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

答案 1 :(得分:0)

请注意,无论您选择TZID(它们是免费格式),它们都应该在配置的VTIMEZONE部分中有匹配的条目。与@anmari所说的相反,Outlook等会识别日历事件需要VTIMEZONE部分 (显示接受/拒绝按钮)。

根据我的经验,最聪明的方法是从现有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

不要更改任何内容 - 只需将其复制/粘贴到您的电子邮件代码中即可。现在,我们在内部使用与此匹配的PHP时区,例如“Europe / Amsterdam”。我们将其用作基准时区,并使用PHP的DateTime类将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"

发送时,接收日历/电子邮件客户端会自动将传入时间数据转换为收件人的时区。好极了! :)