php - How do I adjust the timezone information when sending this iCal invite?

459

I am trying to send a calendar request mail through my php code. I got the mail along with the calendar. But I have a problem in the start date. How to configure the start date according to Gulf Standard Time. Now I am getting according to GMT, though I did not mention anywhere. That means in short, if I will send a request on 7am then in the start date it will show 11 am. My code is like:

$dtstart = $start_date_conf;

$dtend=$end_date_conf;

$todaystamp = date("Ymd\THis\Z");

//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.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";
$headers .= "Content-class: urn:content-classes:calendarmessage\n";

//Create Email Body (HTML)
$message .= "--$mime_boundary\n";
$message .= "Content-Type: text/html; charset=UTF-8\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";

$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_boundary\n";

//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-8\n";

//$message .= "Content-Type: text/calendar;name=\"meeting.ics\";method=REQUEST\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $ical;            

//SEND MAIL
$mail_sent = @mail( $email, $subject, $message, $headers );
576

Answer

Solution:

see RFC5545, you need to add a vtimezone component to refer the TZID to it

Parameter Name: TZID

This parameter MUST be specified on the "DTSTART", "DTEND", "DUE", "EXDATE", and "RDATE" properties when either a DATE-TIME or TIME value type is specified and when the value is neither a UTC or a "floating" time. Failure to include and follow VTIMEZONE definitions in iCalendar objects may lead to inconsistent understanding of the local time at any given location.

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:[email protected]
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

People are also looking for solutions to the problem: how to get value from one page into another page via URL through session in PHP

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.