2015-04-01 65 views
0

我通过邮件向MS Outlook发送事件,但事件时间与我发送的事件不同。icalendar事件时区与用户时区不匹配时间

我也想支持像微软的Outlook,谷歌日历..等

用于实现的iCalendar事件然后让我知道任何好的资源或API的所有应用程序事件iCalender事件。 e.g

发送:

Start Time : 12:40 P.M. 
End Time : 01:00 P.M. 

在用户端中,Outlook显示在1小时后事件。

Start Time : 01:40 P.M. 
End Time : 02:00 P.M. 

我想要我发送相同的结果。

以下是我的icalendar码。

$ical = 'BEGIN:VCALENDAR' . "\r\n" . 
     'PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN' . "\r\n" . 
     'VERSION:2.0' . "\r\n" . 
     'METHOD:REQUEST' . "\r\n" . 
     'BEGIN:VTIMEZONE' . "\r\n" . 
     'TZID:'.date_default_timezone_get() . "\r\n" . 
     'BEGIN:STANDARD' . "\r\n" . 
     'DTSTART:20091101T020000' . "\r\n" . 
     'RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11' . "\r\n" . 
     'TZOFFSETFROM:-0400' . "\r\n" . 
     'TZOFFSETTO:-0500' . "\r\n" . 
     'TZNAME:EST' . "\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:-0400' . "\r\n" . 
     'TZNAME:EDST' . "\r\n" . 
     'END:DAYLIGHT' . "\r\n" . 
     'END:VTIMEZONE' . "\r\n" . 
     'BEGIN:VEVENT' . "\r\n" . 
     'ORGANIZER;CN="'.$from_name.'":MAILTO:'.$from_address. "\r\n" . 
     'ATTENDEE;CN="'.$to_name.'";ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:'.$to_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="'.date_default_timezone_get().'":'.date("Ymd", strtotime($startTime))."T".date("His", strtotime($startTime)). "\r\n" . 
     'DTEND;TZID="'.date_default_timezone_get().'":'.date("Ymd", strtotime($endTime))."T".date("His", strtotime($endTime)). "\r\n" . 
     'TRANSP:OPAQUE'. "\r\n" . 
     'SEQUENCE:1'. "\r\n" . 
     'SUMMARY:' . $subject . "\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

尝试在Outlook中创建新的约会,然后将其保存为iCalendar文件。然后与你自己的文件进行比较。因此,你将能够找到差异。 – 2015-04-01 07:06:14

+0

我会检查并通知你。 – 2015-04-01 07:09:11

回答

1

什么是你的TZID参数需要匹配的是在TZIDVTIMEZONE对象。

+0

我想要发送同样的结果然后我应该设置什么时区?没有时区我们应该发送事件吗? – 2015-04-01 07:02:54

+1

那么现在你把它设置为'东部时间'的属性,并且'date_default_timezone_get()'的结果为参数。这是错误的。我不知道你在问什么。 – Evert 2015-04-01 07:07:33

+0

我用date_default_timezone_get()更新了同一时区的代码。但是我想知道我是否应该得到同样的时间,例如开始时间:下午12:40和结束时间:下午01:00。我想和我在日历中发送的一样。 – 2015-04-01 07:14:00