来自php的ical事件从08:00开始,无论参数如何

时间:2014-10-09 03:22:45

标签: php icalendar

我使用php发送ICS日历邀请,使用这个很棒的功能:

    function sendIcalEmail($firstname,$lastname,$email,$meeting_date,$meeting_name,$meeting_duration,$address,$details) {

        $from_name = "Jason";
        $from_address = "abc@email.com";
        $subject = "Showing"; //Doubles as email subject and meeting subject in calendar
        $meeting_description = $details;
        $meeting_location = $address; //Where will your meeting take place
      $message='';

        //Convert MYSQL datetime and construct iCal start, end and issue dates
        $meetingstamp = STRTOTIME($meeting_date . " UTC");
        $dtstart= GMDATE("Ymd\THis\Z",$meetingstamp);
        $dtend= GMDATE("Ymd\THis\Z",$meetingstamp+$meeting_duration);
        $todaystamp = GMDATE("Ymd\THis\Z");

      echo 'start:'.$dtstart.'<br><br>';
      echo 'end:'.$dtend.'<br><br>';

        //Create unique identifier
        $cal_uid = DATE('Ymd').'T'.DATE('His')."-".RAND()."@mydomain.com";

        //Create Mime Boundry
        $mime_boundary = "----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>Dear '.$firstname.' '.$lastname.',</p>';
        //$message .= '<p>Here is my HTML Email / Used for Meeting Description</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:PUBLISH
    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;name="meeting.ics";method=REQUEST\n';
        $message .= "Content-Transfer-Encoding: 8bit\n\n";
        $message .= $ical;

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

        IF($mail_sent)     {
            RETURN TRUE;
        } ELSE {
            RETURN FALSE;
        }

    }

在我的手机上,我看到以下日期/时间:

2014年10月9日星期四

从08:00到09:00

从12:00到13:00(GMT)

我的to和from参数如下:

   start:20141009T120000Z

   end:20141009T130000Z

所以对我来说,08:00和09:00是出乎意料的。但也许我错过了一些东西。

1 个答案:

答案 0 :(得分:0)

你的时区是多少?您的程序可能会以UTC / GMT(字母Z - 时间戳中的Zulu)显示原始时间,并在您的时区中添加时间。 12:00 - 13:00 UTC与美国东部时间上午8:00至9:00相同。在开始和结束时间设置正确的时区。