发送iCal邀请时,如何调整时区信息?



我试图通过我的php代码发送一个日历请求邮件。我收到了邮件和日历。但是我在开始日期上有个问题。如何根据海湾标准时间配置开始日期。现在我得到的是格林尼治标准时间,虽然我没有提到任何地方。简而言之,这意味着如果我在早上7点发送请求,那么在开始日期它将显示上午11点。我的代码是:

$dtstart = $start_date_conf;
$dtend=$end_date_conf;
$todaystamp = date("YmdTHisZ");
//Create unique identifier
$cal_uid = date('Ymd').'T'.date('His')."-".rand()."@fugenx.com";
//Create Mime Boundry
$mime_boundary = "----Bespot Meeting Booking----".md5(time());
//Create Email Headers
$headers = "From: ".$from_name." <".$from_address.">n";
$headers .= "Reply-To: ".$from_name." <".$from_address.">n";
$headers .= "MIME-Version: 1.0n";
$headers .= "Content-Type: multipart/alternative; boundary="$mime_boundary"n";
$headers .= "Content-class: urn:content-classes:calendarmessagen";
//Create Email Body (HTML)
$message .= "--$mime_boundaryn";
$message .= "Content-Type: text/html; charset=UTF-8n";
$message .= "Content-Transfer-Encoding: 8bitnn";
$message .= "<html>n";
$message .= "<body>n";
$message .= '<p>'.$messagess.'</p>';
$message .= '<p></p><p></p>';
$message .= '<p><b>Thanks & Regards,:</b></p>';
$message .= '<p>'.$full_name.'</p>';
$message .= '<p>'.$full_address.'</p>';
$message .= '<p>'.$email_address.'</p>';
$message .= '<p>'.$mobile_number.'</p>';
$message .= "</body>n";
$message .= "</html>n";
$message .= "--$mime_boundaryn";
//Create ICAL Content (Google rfc 2445 for details and examples of usage) 
$ical =    "BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER:MAILTO:".$from_address."
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";   

$message .= "Content-Type: text/calendar;method=REQUEST;charset=utf-8n";
//$message .= "Content-Type: text/calendar;name="meeting.ics";method=REQUESTn";
$message .= "Content-Transfer-Encoding: 8bitnn";
$message .= $ical;            
//SEND MAIL
$mail_sent = @mail( $email, $subject, $message, $headers );

请参阅RFC5545,您需要添加一个vtimezone组件以将TZID引用到它

参数名称:TZID

此参数必须在"DTSTART"&; dtend &; due &; exdate &;和&;rdate &;属性时指定DATE-TIME或TIME值类型,取值为既不是UTC也不是"floating"时间。在iCalendar对象中不包含并遵循VTIMEZONE定义可能导致对本地时间的理解不一致

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
METHOD:REQUEST
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Asia/Qatar
BEGIN:STANDARD
DTSTART:20081102T090000
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:CST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER:MAILTO:mailto@organiser.net
DTSTART;TZID=Asia/Qatar:20130104T090000
DTEND;TZID=Asia/Qatar:20130104T100000
LOCATION:meeting_location
TRANSP:OPAQUE
SEQUENCE:0
UID:cal_uid
DTSTAMP:20130104T224617Z
DESCRIPTION:meeting_description
SUMMARY:subject
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR

最新更新